import { useState } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogFooter, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { Badge } from '@/components/ui/badge'; import { AlertTriangle, User, Clock } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; import { format } from 'date-fns'; import type { ConflictCheckResult } from '@/lib/submissionItemsService'; interface ConflictResolutionModalProps { open: boolean; onOpenChange: (open: boolean) => void; conflictData: ConflictCheckResult; onResolve: (resolution: 'keep-mine' | 'keep-theirs' | 'reload') => Promise; } export function ConflictResolutionModal({ open, onOpenChange, conflictData, onResolve, }: ConflictResolutionModalProps) { const [selectedResolution, setSelectedResolution] = useState(null); const [isResolving, setIsResolving] = useState(false); const { toast } = useToast(); const handleResolve = async () => { if (!selectedResolution) return; setIsResolving(true); try { await onResolve(selectedResolution as 'keep-mine' | 'keep-theirs' | 'reload'); toast({ title: 'Conflict Resolved', description: 'Changes have been applied successfully', }); onOpenChange(false); } catch (error) { toast({ title: 'Resolution Failed', description: error instanceof Error ? error.message : 'Failed to resolve conflict', variant: 'destructive', }); } finally { setIsResolving(false); } }; if (!conflictData.serverVersion) return null; return ( Edit Conflict Detected Someone else modified this submission while you were editing. Choose how to resolve the conflict.
Modified by: {conflictData.serverVersion.modified_by_profile?.display_name || conflictData.serverVersion.modified_by_profile?.username || 'Unknown'}
{format(new Date(conflictData.serverVersion.last_modified_at), 'PPpp')}

Choose Resolution:

); }