import { formatDistanceToNow } from 'date-fns'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card } from '@/components/ui/card'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; import { ChevronDown, Edit, User } from 'lucide-react'; import { useState } from 'react'; interface EditHistoryEntryProps { editId: string; editorName: string; editorAvatar?: string; timestamp: string; changedFields: string[]; editReason?: string; beforeData?: Record; afterData?: Record; } export function EditHistoryEntry({ editId, editorName, editorAvatar, timestamp, changedFields, editReason, beforeData, afterData, }: EditHistoryEntryProps) { const [isExpanded, setIsExpanded] = useState(false); const getFieldValue = (data: Record | undefined, field: string): string => { if (!data || !(field in data)) return '—'; const value = data[field]; if (value === null || value === undefined) return '—'; if (typeof value === 'object') return JSON.stringify(value, null, 2); return String(value); }; return (
{/* Editor Avatar */} {/* Edit Info */}
{editorName} {changedFields.length} field{changedFields.length !== 1 ? 's' : ''}
{formatDistanceToNow(new Date(timestamp), { addSuffix: true })}
{/* Changed Fields Summary */}
{changedFields.slice(0, 3).map((field) => ( {field} ))} {changedFields.length > 3 && ( +{changedFields.length - 3} more )}
{/* Edit Reason */} {editReason && (

"{editReason}"

)} {/* Expand/Collapse Button */}
{/* Detailed Changes */} {changedFields.map((field) => { const beforeValue = getFieldValue(beforeData, field); const afterValue = getFieldValue(afterData, field); return (
{field}
Before
{beforeValue}
After
{afterValue}
); })}
); }