'use client'; import { memo } from 'react'; import Link from 'next/link'; import { ArrowLeft, ChevronDown, GitCompareArrows, ListChecks, MoreVertical, Plus, Share2, ShieldCheck, Trash2 } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Separator } from '@/components/ui/separator'; import { cn } from '@/lib/utils'; import { DownloadControls } from '@/components/video-page/download-controls'; import { VersionDeleteDialog } from '@/components/video-page/version-delete-dialog'; import { VersionActionsDialog } from '@/components/video-page/version-actions-dialog'; import type { BunnyDownloadPreference, DownloadTarget, Version } from '@/components/video-page/types'; import type { VideoSource } from '@/lib/video-providers'; interface VideoPageHeaderProps { mode: 'dashboard' | 'watch'; backHref: string; title: string; projectName: string; isFullscreenMode: boolean; cursorIdle: boolean; isPlaying: boolean; versions: Version[]; activeVersion: Version; activeVersionId: string | null; onVersionSelect: (versionId: string) => void; onDeleteCurrentVersionClick: () => void; showDeleteVersionDialog: boolean; setShowDeleteVersionDialog: (open: boolean) => void; isDeletingVersion: boolean; onDeleteVersion: () => void; videoCanDownload: boolean; isDownloadingVideo: boolean; activeDownloadTarget: DownloadTarget | null; onDownload: (preference?: BunnyDownloadPreference) => void; projectId?: string; videoId: string; showVersionDialog: boolean; setShowVersionDialog: (open: boolean) => void; newVersionMode: 'url' | 'file'; setNewVersionMode: (mode: 'url' | 'file') => void; newVersionUrl: string; handleNewVersionUrlChange: (url: string) => void; newVersionUrlError: string; newVersionSource: VideoSource | null; newVersionFile: File | null; setNewVersionFile: (file: File | null) => void; newVersionLabel: string; setNewVersionLabel: (value: string) => void; newVersionUploadStatus: string; newVersionUploadProgress: number; isCreatingVersion: boolean; onCreateVersion: () => void; onOpenCompare: () => void; canRequestApproval: boolean; canShareVideo: boolean; hasPendingApprovalRequest: boolean; onOpenApprovalRequest: () => void; onOpenApprovalsPanel: () => void; } export const VideoPageHeader = memo(function VideoPageHeader({ mode, backHref, title, projectName, isFullscreenMode, cursorIdle, isPlaying, versions, activeVersion, activeVersionId, onVersionSelect, onDeleteCurrentVersionClick, showDeleteVersionDialog, setShowDeleteVersionDialog, isDeletingVersion, onDeleteVersion, videoCanDownload, isDownloadingVideo, activeDownloadTarget, onDownload, projectId, videoId, showVersionDialog, setShowVersionDialog, newVersionMode, setNewVersionMode, newVersionUrl, handleNewVersionUrlChange, newVersionUrlError, newVersionSource, newVersionFile, setNewVersionFile, newVersionLabel, setNewVersionLabel, newVersionUploadStatus, newVersionUploadProgress, isCreatingVersion, onCreateVersion, onOpenCompare, canRequestApproval, canShareVideo, hasPendingApprovalRequest, onOpenApprovalRequest, onOpenApprovalsPanel, }: VideoPageHeaderProps) { const canManageVideo = canShareVideo || canRequestApproval; return (
Back
{title} {projectName}
{versions.map((version) => ( onVersionSelect(version.id)} > v{version.versionNumber} {version.versionLabel || `Version ${version.versionNumber}`} {version._count.comments} comments ))} {mode === 'dashboard' && versions.length > 1 && ( <> Delete Current Version )} {mode === 'dashboard' && ( <> {canManageVideo ? ( ) : null}
{versions.length >= 2 && ( )} {canManageVideo ? (
) : null} {(canShareVideo || canRequestApproval) && (
{canShareVideo ? ( Share Video ) : ( Share Video )} Request Approval
)} )}
); });