'use client'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Badge } from '@/components/ui/badge'; import { Calendar, Check, X, FileText, Copy, CheckCircle2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useState } from 'react'; interface DetailModalProps { open: boolean; onOpenChange: (open: boolean) => void; title: string; data: Record | null; fields?: Array<{ key: string; label: string; render?: (value: any) => React.ReactNode; }>; } export default function DetailModal({ open, onOpenChange, title, data, fields }: DetailModalProps) { const [copiedField, setCopiedField] = useState(null); if (!data) return null; const copyToClipboard = (text: string, fieldKey: string) => { navigator.clipboard.writeText(text); setCopiedField(fieldKey); setTimeout(() => setCopiedField(null), 2000); }; const renderValue = (value: any): React.ReactNode => { if (value === null || value === undefined) { return ( null ); } if (typeof value === 'boolean') { return ( {value ? : } {value ? 'Yes' : 'No'} ); } if (value instanceof Date || (typeof value === 'string' && value.match(/^\d{4}-\d{2}-\d{2}/))) { return ( {new Date(value).toLocaleString()} ); } if (typeof value === 'object') { return (
          {JSON.stringify(value, null, 2)}
        
); } return {String(value)}; }; const displayFields = fields || Object.keys(data).map(key => ({ key, label: key, render: undefined })); return (
{title} Detailed view of record • {displayFields.length} fields
ID: {data.id}
{displayFields.map((field, index) => { const value = data[field.key]; const stringValue = value !== null && value !== undefined ? String(value) : ''; return (
{field.label}
{field.render ? field.render(value) : renderValue(value)}
{stringValue && ( )}
); })}
); }