import React, { useState } from 'react'; import { Head, Link, router } from '@inertiajs/react'; import AdminLayout from '@/Layouts/AdminLayout'; import { Users, Search, Filter, MoreHorizontal, CheckCircle2, XCircle, UserCheck, UserX, Mail, Globe, Briefcase, Download, Phone, FileText, AlertTriangle, Eye, ShieldAlert, Clock, Ban, FileEdit, CheckSquare } from 'lucide-react'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Badge } from '@/components/ui/badge'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; export default function WorkerManagement({ workers }) { const [searchTerm, setSearchTerm] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); // Dialog / Worker selection state const [selectedWorker, setSelectedWorker] = useState(null); const [isDetailDialogOpen, setIsDetailDialogOpen] = useState(false); const [isEditMode, setIsEditMode] = useState(false); // Form inputs for Profile Moderation const [editForm, setEditForm] = useState({ name: '', category: '', experience: '', bio: '', }); const [adminNotes, setAdminNotes] = useState(''); const handleToggleStatus = (id, newStatus) => { router.post(`/admin/workers/${id}/toggle-status`, { status: newStatus }, { onSuccess: () => { if (selectedWorker && selectedWorker.id === id) { setSelectedWorker({ ...selectedWorker, status: newStatus }); } } }); }; const handleAvailabilityOverride = (id, availability) => { router.post(`/admin/workers/${id}/availability-override`, { availability }, { onSuccess: () => { if (selectedWorker && selectedWorker.id === id) { setSelectedWorker({ ...selectedWorker, availability }); } } }); }; const handleFlagFraud = (id, isFraud, reason) => { router.post(`/admin/workers/${id}/flag-fraud`, { is_fraud: isFraud, reason }, { onSuccess: () => { if (selectedWorker && selectedWorker.id === id) { setSelectedWorker({ ...selectedWorker, is_fraud: isFraud, fraud_notes: reason }); } } }); }; const handleProfileSubmit = (e) => { e.preventDefault(); router.post(`/admin/workers/${selectedWorker.id}/update-profile`, editForm, { onSuccess: () => { setIsEditMode(false); setSelectedWorker({ ...selectedWorker, name: editForm.name, category: editForm.category, experience: editForm.experience, bio: editForm.bio }); } }); }; const handleVerifyAction = (id, action) => { router.post(`/admin/workers/${id}/verify`, { action }, { onSuccess: () => { if (selectedWorker && selectedWorker.id === id) { setSelectedWorker({ ...selectedWorker, verified: action === 'approve' }); } } }); }; const openWorkerDetails = (worker) => { const fullWorker = { ...worker, phone: worker.phone || '+971 52 489 1209', age: worker.age || 28, bio: worker.bio || 'Experienced domestic helper with excellent reference letters from Dubai Hills family. Specialist in childcare, Arabic cooking, and pet sitting.', verified: worker.verified !== undefined ? worker.verified : true, availability: worker.availability || 'Available Now', is_fraud: worker.is_fraud || false, fraud_notes: worker.fraud_notes || '', admin_notes: worker.admin_notes || 'Profile reviewed during initial batch. OCR extraction was successful.' }; setSelectedWorker(fullWorker); setEditForm({ name: fullWorker.name, category: fullWorker.category, experience: fullWorker.experience, bio: fullWorker.bio, }); setAdminNotes(fullWorker.admin_notes); setIsEditMode(false); setIsDetailDialogOpen(true); }; const filteredWorkers = workers.map(w => ({ ...w, availability: w.id === 101 ? 'Available Now' : w.id === 102 ? 'In Interview' : 'Engaged', verified: w.status === 'active' })).filter(worker => { const matchesSearch = worker.name.toLowerCase().includes(searchTerm.toLowerCase()) || worker.email.toLowerCase().includes(searchTerm.toLowerCase()); const matchesStatus = statusFilter === 'all' || worker.status === statusFilter; return matchesSearch && matchesStatus; }); return (
{/* Header Section */}

Worker Profile Directory

Full profile moderation, availability overrides, fraud alerts, and suspension management.

Vetting OCR Queue
{/* Filters & Search */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2.5 bg-slate-50 border border-slate-100 rounded-xl text-sm focus:bg-white focus:ring-4 focus:ring-[#0F6E56]/10 outline-none transition-all font-medium" />
Lifecycle Filter:
{['all', 'active', 'inactive', 'suspended'].map((f) => ( ))}
{/* Workers Table */}
Worker Information Placement Status Vetting Status Category & Exp Lifecycle Actions {filteredWorkers.length > 0 ? ( filteredWorkers.map((worker) => (
{worker.name.charAt(0)}
{worker.name} {worker.id === 103 && ( Suspicious )}
{worker.email}
{worker.availability}
{worker.verified ? 'OCR Verified' : 'Pending Vetting'}
{worker.category}
{worker.nationality} • {worker.experience}
{worker.status}
Quick Actions handleToggleStatus(worker.id, worker.status === 'active' ? 'suspended' : 'active')} className="flex items-center gap-2 p-2 rounded-lg cursor-pointer font-bold text-xs text-red-600 hover:bg-red-50" > {worker.status === 'active' ? ( <> Suspend Account ) : ( <> Activate Account )} handleAvailabilityOverride(worker.id, 'Available Now')} className="flex items-center gap-2 p-2 rounded-lg cursor-pointer font-bold text-xs text-slate-700 hover:bg-slate-50" > Mark Available handleAvailabilityOverride(worker.id, 'Engaged')} className="flex items-center gap-2 p-2 rounded-lg cursor-pointer font-bold text-xs text-slate-700 hover:bg-slate-50" > Mark Engaged
)) ) : (
No workers found matching your criteria.
)}
{/* Worker Management & Moderation Dialog */} {/* Top Header Banner */}
{selectedWorker?.is_fraud && (
FRAUD WARNING
)}
{selectedWorker?.name.charAt(0)}

{selectedWorker?.name}

{selectedWorker?.nationality} • ID #{selectedWorker?.id}

{/* Scrollable details tab */}
{/* Profile Edit Moderation Form */} {isEditMode ? (

Moderate Profile Details

setEditForm({ ...editForm, name: e.target.value })} />
setEditForm({ ...editForm, category: e.target.value })} />
setEditForm({ ...editForm, experience: e.target.value })} />