import { memo, useCallback } from 'react'; import { MessageSquare, Image, FileText, Calendar, Edit, Lock, AlertCircle, Code2 } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { UserAvatar } from '@/components/ui/user-avatar'; import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { ValidationSummary } from '../ValidationSummary'; import { TransactionStatusIndicator, type TransactionStatus } from '../TransactionStatusIndicator'; import { format } from 'date-fns'; import type { ModerationItem } from '@/types/moderation'; import type { ValidationResult } from '@/lib/entityValidationSchemas'; interface QueueItemHeaderProps { item: ModerationItem; isMobile: boolean; hasModeratorEdits: boolean; isLockedByOther: boolean; currentLockSubmissionId?: string; validationResult: ValidationResult | null; transactionStatus?: TransactionStatus; transactionMessage?: string; onValidationChange: (result: ValidationResult) => void; onViewRawData?: () => void; } const getStatusBadgeVariant = (status: string): "default" | "secondary" | "destructive" | "outline" => { switch (status) { case 'pending': return 'default'; case 'approved': return 'secondary'; case 'rejected': return 'destructive'; case 'flagged': return 'destructive'; case 'partially_approved': return 'outline'; default: return 'outline'; } }; export const QueueItemHeader = memo(({ item, isMobile, hasModeratorEdits, isLockedByOther, currentLockSubmissionId, validationResult, transactionStatus = 'idle', transactionMessage, onValidationChange, onViewRawData }: QueueItemHeaderProps) => { const handleValidationChange = useCallback((result: ValidationResult) => { onValidationChange(result); }, [onValidationChange]); return ( <>
{item.type === 'review' ? ( <> Review ) : item.submission_type === 'photo' ? ( <> Photo ) : ( <> Submission )} {item.status === 'partially_approved' ? 'Partially Approved' : item.status.charAt(0).toUpperCase() + item.status.slice(1)} {hasModeratorEdits && ( Edited

This submission has been modified by a moderator

)} {item.status === 'partially_approved' && ( Needs Retry )} {isLockedByOther && item.type === 'content_submission' && ( Locked by Another Moderator )} {currentLockSubmissionId === item.id && item.type === 'content_submission' && ( Claimed by You )} {item.submission_items && item.submission_items.length > 0 && item.submission_items[0].item_data && ( )}
{onViewRawData && (

View complete JSON data

)}
{format(new Date(item.created_at), isMobile ? 'MMM d, HH:mm:ss' : 'MMM d, yyyy HH:mm:ss.SSS')}

Full timestamp:

{item.created_at}

{item.user_profile && (
{item.user_profile.display_name || item.user_profile.username} {item.user_profile.display_name && ( @{item.user_profile.username} )}
)} ); }); QueueItemHeader.displayName = 'QueueItemHeader';