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,
Eye
} 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 EmployersIndex({ employers: initialEmployers, sponsors, filters = {} }) {
const employers = initialEmployers || sponsors || { data: [], total: 0 };
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 formatDate = (dateStr) => {
if (!dateStr) return 'N/A';
try {
return new Date(dateStr).toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
} catch (e) {
return dateStr;
}
};
const [selectedEmployer, setSelectedEmployer] = useState(null);
const [isDetailsOpen, setIsDetailsOpen] = useState(false);
const [isEditOpen, setIsEditOpen] = useState(false);
const [editForm, setEditForm] = useState({
id: '',
name: '',
email: '',
company_name: '',
phone: '',
country: '',
subscription_status: 'none'
});
// 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 employer?')) {
router.delete(`/admin/employers/${id}`);
}
};
const handleEditClick = (employer) => {
setEditForm({
id: employer.id,
name: employer.name,
email: employer.email,
company_name: employer.employer_profile?.company_name || '',
phone: employer.employer_profile?.phone || '',
country: employer.employer_profile?.country || 'UAE',
subscription_status: employer.subscription_status || 'none'
});
setIsEditOpen(true);
};
const handleEditSubmit = (e) => {
e.preventDefault();
router.post(`/admin/employers/${editForm.id}/update`, editForm, {
onSuccess: () => {
setIsEditOpen(false);
}
});
};
const handleExport = () => {
const params = new URLSearchParams({
search: searchTerm,
status: statusFilter,
location: locationFilter,
sort_field: sortField,
sort_order: sortOrder
});
window.location.href = `/admin/employers/export?${params.toString()}`;
};
const viewDetails = (employer) => {
setSelectedEmployer(employer);
setIsDetailsOpen(true);
};
return (