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,
Building
} 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 CharitiesIndex({ sponsors, filters = {}, nationalities = [], stats = {} }) {
const [searchTerm, setSearchTerm] = useState(filters.search || '');
const [statusFilter, setStatusFilter] = useState(filters.status || 'All');
const [verificationFilter, setVerificationFilter] = useState(filters.verification || 'All');
const [licenseFilter, setLicenseFilter] = useState(filters.license || 'All');
const [nationalityFilter, setNationalityFilter] = useState(filters.nationality || '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: '',
organization_name: '',
email: '',
mobile: '',
city: '',
nationality: '',
address: ''
});
// Handle search/filter queries
const triggerSearch = (searchVal, statusVal, verificationVal, licenseVal, nationalityVal, sortF, sortO) => {
router.get('/admin/charity-organizations', {
search: searchVal,
status: statusVal,
verification: verificationVal,
license: licenseVal,
nationality: nationalityVal,
sort_field: sortF,
sort_order: sortO
}, {
preserveState: true,
preserveScroll: true,
replace: true
});
};
useEffect(() => {
const delayDebounceFn = setTimeout(() => {
if (searchTerm !== (filters.search || '')) {
triggerSearch(searchTerm, statusFilter, verificationFilter, licenseFilter, nationalityFilter, sortField, sortOrder);
}
}, 500);
return () => clearTimeout(delayDebounceFn);
}, [searchTerm]);
const handleFilterChange = (status, verification, license, nationality) => {
setStatusFilter(status);
setVerificationFilter(verification);
setLicenseFilter(license);
setNationalityFilter(nationality);
triggerSearch(searchTerm, status, verification, license, nationality, sortField, sortOrder);
};
const handleSort = (field) => {
const order = sortField === field && sortOrder === 'desc' ? 'asc' : 'desc';
setSortField(field);
setSortOrder(order);
triggerSearch(searchTerm, statusFilter, verificationFilter, licenseFilter, nationalityFilter, field, order);
};
const handleApprove = (id) => {
router.post(`/admin/charity-organizations/${id}/verify`, {}, {
onSuccess: () => {
setIsDetailsOpen(false);
}
});
};
const handleSuspend = (id) => {
router.post(`/admin/charity-organizations/${id}/suspend`, {}, {
onSuccess: () => {
setIsDetailsOpen(false);
}
});
};
const handleActivate = (id) => {
router.post(`/admin/charity-organizations/${id}/activate`, {}, {
onSuccess: () => {
setIsDetailsOpen(false);
}
});
};
const handleDelete = (id) => {
if (confirm('Are you absolutely sure you want to permanently delete this charity organization?')) {
router.delete(`/admin/charity-organizations/${id}`);
}
};
const handleEditClick = (sponsor) => {
setEditForm({
id: sponsor.id,
full_name: sponsor.full_name,
organization_name: sponsor.organization_name || '',
email: sponsor.email,
mobile: sponsor.mobile,
city: sponsor.city || 'Dubai',
nationality: sponsor.nationality || '',
address: sponsor.address || ''
});
setIsEditOpen(true);
};
const handleEditSubmit = (e) => {
e.preventDefault();
router.post(`/admin/charity-organizations/${editForm.id}/update`, editForm, {
onSuccess: () => {
setIsEditOpen(false);
}
});
};
const handleExport = () => {
const params = new URLSearchParams({
search: searchTerm,
status: statusFilter,
verification: verificationFilter,
license: licenseFilter,
nationality: nationalityFilter,
sort_field: sortField,
sort_order: sortOrder
});
window.location.href = `/admin/charity-organizations/export?${params.toString()}`;
};
const viewDetails = (sponsor) => {
setSelectedSponsor(sponsor);
setIsDetailsOpen(true);
};
return (