import React, { useState, useEffect } from 'react'; import { Head, router, Link } from '@inertiajs/react'; import AdminLayout from '@/Layouts/AdminLayout'; import { Search, Filter, Download, Users, Mail, MapPin, Calendar, CheckCircle, Clock, XCircle, ExternalLink, MoreVertical, BadgeDollarSign, ShieldAlert, TrendingUp, AlertOctagon, Award, Edit2, Trash2, Check, Phone, ShieldCheck } from 'lucide-react'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Badge } from '@/components/ui/badge'; export default function SponsorsIndex({ sponsors, filters = {} }) { const [searchTerm, setSearchTerm] = useState(filters.search || ''); const [statusFilter, setStatusFilter] = useState(filters.status || 'All'); const [locationFilter, setLocationFilter] = useState(filters.location || 'All'); const [sortField, setSortField] = useState(filters.sort_field || 'created_at'); const [sortOrder, setSortOrder] = useState(filters.sort_order || 'desc'); const [selectedSponsor, setSelectedSponsor] = useState(null); const [isDetailsOpen, setIsDetailsOpen] = useState(false); const [isEditOpen, setIsEditOpen] = useState(false); const [editForm, setEditForm] = useState({ id: '', full_name: '', email: '', mobile: '', city: '', nationality: '', address: '', subscription_plan: 'premium', subscription_status: 'active' }); // Handle search/filter queries const triggerSearch = (searchVal, statusVal, locationVal, sortF, sortO) => { router.get('/admin/employers', { search: searchVal, status: statusVal, location: locationVal, sort_field: sortF, sort_order: sortO }, { preserveState: true, preserveScroll: true, replace: true }); }; useEffect(() => { const delayDebounceFn = setTimeout(() => { if (searchTerm !== (filters.search || '')) { triggerSearch(searchTerm, statusFilter, locationFilter, sortField, sortOrder); } }, 500); return () => clearTimeout(delayDebounceFn); }, [searchTerm]); const handleFilterChange = (status, location) => { setStatusFilter(status); setLocationFilter(location); triggerSearch(searchTerm, status, location, sortField, sortOrder); }; const handleSort = (field) => { const order = sortField === field && sortOrder === 'desc' ? 'asc' : 'desc'; setSortField(field); setSortOrder(order); triggerSearch(searchTerm, statusFilter, locationFilter, field, order); }; const handleApprove = (id) => { router.post(`/admin/employers/${id}/verify`, {}, { onSuccess: () => { setIsDetailsOpen(false); } }); }; const handleSuspend = (id) => { router.post(`/admin/employers/${id}/suspend`, {}, { onSuccess: () => { setIsDetailsOpen(false); } }); }; const handleActivate = (id) => { router.post(`/admin/employers/${id}/activate`, {}, { onSuccess: () => { setIsDetailsOpen(false); } }); }; const handleDelete = (id) => { if (confirm('Are you absolutely sure you want to permanently delete this sponsor registry?')) { router.delete(`/admin/employers/${id}`); } }; const handleEditClick = (sponsor) => { setEditForm({ id: sponsor.id, full_name: sponsor.full_name, email: sponsor.email, mobile: sponsor.mobile, city: sponsor.city || 'Dubai', nationality: sponsor.nationality || '', address: sponsor.address || '', subscription_plan: sponsor.subscription_plan || 'premium', subscription_status: sponsor.subscription_status || 'active' }); setIsEditOpen(true); }; const handleEditSubmit = (e) => { e.preventDefault(); router.post(`/admin/employers/${editForm.id}/update`, editForm, { onSuccess: () => { setIsEditOpen(false); } }); }; const viewDetails = (sponsor) => { setSelectedSponsor(sponsor); setIsDetailsOpen(true); }; return (
{/* Statistics Ribbons */}
Total Employers

{sponsors.total || 0}

Active Plans

{sponsors.data.filter(s => s.subscription_status === 'active').length}

Pending Approval

{sponsors.data.filter(s => !s.is_verified).length}

Suspended Accounts

{sponsors.data.filter(s => s.status === 'suspended').length}

{/* Search and Filters */}
setSearchTerm(e.target.value)} />
{/* Dynamic Sponsors Table */}
handleSort('full_name')} className="font-bold text-slate-500 text-[10px] uppercase tracking-widest h-14 pl-8 cursor-pointer select-none"> Sponsor Info {sortField === 'full_name' && (sortOrder === 'desc' ? '↓' : '↑')} handleSort('city')} className="font-bold text-slate-500 text-[10px] uppercase tracking-widest h-14 cursor-pointer select-none"> Location {sortField === 'city' && (sortOrder === 'desc' ? '↓' : '↑')} Subscription Plan Verification Status handleSort('status')} className="font-bold text-slate-500 text-[10px] uppercase tracking-widest h-14 cursor-pointer select-none"> Status {sortField === 'status' && (sortOrder === 'desc' ? '↓' : '↑')} Action {sponsors.data.length > 0 ? ( sponsors.data.map((sponsor) => (
{sponsor.full_name.charAt(0)}

{sponsor.full_name}

{sponsor.email}

{sponsor.mobile}

{sponsor.city || 'Dubai'}
{sponsor.subscription_plan ? `${sponsor.subscription_plan} Pass` : 'No Plan'} Status: {sponsor.subscription_status.toUpperCase()}
{sponsor.is_verified ? ( <> OTP Verified ) : ( <> Unverified )}
{sponsor.status === 'active' && } {sponsor.status === 'inactive' && } {sponsor.status === 'suspended' && } {sponsor.status}
Quick Actions handleEditClick(sponsor)} >
Edit Registry
{!sponsor.is_verified && ( handleApprove(sponsor.id)}>
Approve / Verify
)} {sponsor.status === 'active' ? ( handleSuspend(sponsor.id)} className="p-3 rounded-lg focus:bg-rose-50 cursor-pointer text-rose-600 font-bold" >
Suspend Sponsor
) : ( handleActivate(sponsor.id)} className="p-3 rounded-lg focus:bg-emerald-50 cursor-pointer text-emerald-600 font-bold" >
Activate Sponsor
)} handleDelete(sponsor.id)} className="p-3 rounded-lg focus:bg-red-50 cursor-pointer text-red-600 font-bold animate-pulse" >
Delete Sponsor
)) ) : ( No registered sponsors match the active search/filters criteria. )}
{/* Pagination */} {sponsors.last_page > 1 && (
Showing page {sponsors.current_page} of {sponsors.last_page}
Previous Next
)}
{/* Advanced Sponsor Detail Modal */}
{selectedSponsor?.full_name.charAt(0)}

{selectedSponsor?.full_name}

📍 {selectedSponsor?.city || 'Dubai'} • Registered {new Date(selectedSponsor?.created_at).toLocaleDateString()}

{/* Vetting info */}

UAE Sponsor Vetting Dossier

Sponsor ID: SPN-{selectedSponsor?.id}
Email: {selectedSponsor?.email}
Mobile: {selectedSponsor?.mobile}
{selectedSponsor?.address && (
Address: {selectedSponsor?.address}
)}
OTP Verification: {selectedSponsor?.is_verified ? 'Passed' : 'Pending'}
{selectedSponsor?.otp_verified_at && (
Verified At: {new Date(selectedSponsor.otp_verified_at).toLocaleString()}
)}
Nationality: {selectedSponsor?.nationality || 'N/A'}
{/* Subscription monitoring */}

Premium Subscription Status

Active Plan {selectedSponsor?.subscription_plan || 'No Active Plan'}
Payment Status {selectedSponsor?.payment_status}
{selectedSponsor?.subscription_start_date && (
Start Date {new Date(selectedSponsor.subscription_start_date).toLocaleDateString()}
)} {selectedSponsor?.subscription_end_date && (
Expiry Date {new Date(selectedSponsor.subscription_end_date).toLocaleDateString()}
)}
Sponsor Verification Action: {!selectedSponsor?.is_verified ? ( ) : ( OTP Verified )}
{selectedSponsor?.status !== 'suspended' ? ( ) : ( )}
{/* Sponsor Edit Dialog */} Edit Sponsor Registry Details
setEditForm({ ...editForm, full_name: e.target.value })} required />
setEditForm({ ...editForm, email: e.target.value })} required />
setEditForm({ ...editForm, mobile: e.target.value })} required />
setEditForm({ ...editForm, nationality: e.target.value })} />
setEditForm({ ...editForm, address: e.target.value })} />
); }