import React, { useState } from 'react';
import { Head, router } from '@inertiajs/react';
import AdminLayout from '@/Layouts/AdminLayout';
import {
Search,
FileText,
Eye,
CheckCircle,
XCircle,
Clock,
Edit2,
ZoomIn,
X,
Loader2
} from 'lucide-react';
import { Badge } from '@/components/ui/badge';
import {
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
} from '@/components/ui/dialog';
import {
Pagination,
PaginationContent,
PaginationItem,
PaginationLink,
} from '@/components/ui/pagination';
export default function Verifications({ verifications, status }) {
const [selectedItem, setSelectedItem] = useState(null);
const [isDialogOpen, setIsDialogOpen] = useState(false);
const [lightboxImage, setLightboxImage] = useState(null);
// Dialog state
const [ocrOverrides, setOcrOverrides] = useState({});
const [editingField, setEditingField] = useState(null);
const [rejectionReason, setRejectionReason] = useState('');
const [showRejectionInput, setShowRejectionInput] = useState(false);
const [submitting, setSubmitting] = useState(false);
const tabs = [
{ label: 'All', value: 'all' },
{ label: 'Auto-Approved', value: 'approved' },
{ label: 'Flagged/Manual', value: 'rejected' },
];
const handleTabClick = (tabValue) => {
router.get('/admin/workers/verifications', { status: tabValue }, { preserveState: true });
};
const openReview = (item) => {
setSelectedItem(item);
setOcrOverrides(item.ocr_data || {});
setEditingField(null);
setShowRejectionInput(false);
setRejectionReason('');
setIsDialogOpen(true);
};
return (
{/* Header / Sub-title */}
Identity Audit Logs
Automated document verification system logs and OCR extractions.
{/* Filter Tabs */}
{tabs.map((tab) => (
))}
{/* Desktop Table / Mobile Card List */}
| Worker Name |
Nationality |
Passport No. |
Processed |
Status |
Actions |
{verifications?.data?.map((item) => (
| {item.worker_name} |
{item.nationality} |
{item.passport_number} |
{item.processed_at} |
Auto-Verified
|
|
))}
{/* Mobile Card List */}
{verifications?.data?.map((item) => (
{item.worker_name}
Auto-Verified
Nationality: {item.nationality}
Passport: {item.passport_number}
Processed: {item.processed_at}
))}
{verifications?.data?.length === 0 && (
No verification logs found for the selected filter.
)}
{/* Pagination Component */}
{verifications?.links && verifications.links.length > 3 && (
{verifications.links.map((link, idx) => {
const isPrev = link.label.includes('Previous');
const isNext = link.label.includes('Next');
const label = isPrev ? '‹' : isNext ? '›' : link.label;
if (!link.url) {
return (
{label}
);
}
return (
{label}
);
})}
)}
{/* Review Dialog */}
{/* Lightbox Zoom */}
{lightboxImage && (
setLightboxImage(null)}
className="fixed inset-0 z-50 bg-black/80 backdrop-blur-sm flex items-center justify-center p-4 animate-in fade-in duration-200"
>
)}
);
}