import { useState } from 'react'; import { ChevronDown, ChevronRight, Flag, Clock, Edit2, Link2, TestTube } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; import { format } from 'date-fns'; import type { ModerationItem } from '@/types/moderation'; import { UserAvatar } from '@/components/ui/user-avatar'; interface SubmissionMetadataPanelProps { item: ModerationItem; } export function SubmissionMetadataPanel({ item }: SubmissionMetadataPanelProps) { const [isOpen, setIsOpen] = useState(false); // Extract metadata from content_submissions const metadata = { // Workflow approval_mode: (item as any).approval_mode || 'full', escalated: item.escalated || false, escalation_reason: (item as any).escalation_reason, escalated_by: (item as any).escalated_by, escalated_at: (item as any).escalated_at, // Review Tracking first_reviewed_at: (item as any).first_reviewed_at, review_count: (item as any).review_count || 0, resolved_at: (item as any).resolved_at, // Modification Tracking last_modified_at: (item as any).last_modified_at, last_modified_by: (item as any).last_modified_by, // Relationships original_submission_id: (item as any).original_submission_id, // Flags is_test_data: (item as any).is_test_data || false, }; const hasMetadata = metadata.escalated || metadata.review_count > 0 || metadata.last_modified_at || metadata.original_submission_id || metadata.is_test_data; if (!hasMetadata) return null; return ( {isOpen ? : } Submission Metadata {metadata.review_count} review{metadata.review_count !== 1 ? 's' : ''}
{/* Workflow Section */} {(metadata.escalated || metadata.approval_mode !== 'full') && (
Workflow
Approval Mode: {metadata.approval_mode === 'full' ? 'Full Approval' : 'Partial Approval'}
{metadata.escalated && ( <>
Escalated: Yes
{metadata.escalation_reason && (
Reason:

{metadata.escalation_reason}

)} {metadata.escalated_at && (
Escalated At: {format(new Date(metadata.escalated_at), 'MMM d, yyyy HH:mm:ss')}
)} )}
)} {/* Review Tracking Section */} {(metadata.first_reviewed_at || metadata.resolved_at || metadata.review_count > 0) && (
Review Tracking
Review Count: {metadata.review_count}
{metadata.first_reviewed_at && (
First Reviewed: {format(new Date(metadata.first_reviewed_at), 'MMM d, yyyy HH:mm:ss')}
)} {metadata.resolved_at && (
Resolved At: {format(new Date(metadata.resolved_at), 'MMM d, yyyy HH:mm:ss')}
)}
)} {/* Modification Tracking Section */} {(metadata.last_modified_at || metadata.last_modified_by) && (
Modification Tracking
{metadata.last_modified_at && (
Last Modified: {format(new Date(metadata.last_modified_at), 'MMM d, yyyy HH:mm:ss')}
)} {metadata.last_modified_by && (
Modified By: Moderator
)}
)} {/* Relationships Section */} {metadata.original_submission_id && (
Relationships
)} {/* Flags Section */} {metadata.is_test_data && (
Flags
Test Data: Yes
)}
); }