import React, { useState } from 'react'; import { Head, Link, router } from '@inertiajs/react'; import AdminLayout from '@/Layouts/AdminLayout'; import { LifeBuoy, MessageSquare, AlertCircle, CheckCircle, Clock, Search, Eye, Plus, User, ShieldAlert, TrendingUp, Inbox } from 'lucide-react'; export default function Index({ tickets, filters }) { const [searchQuery, setSearchQuery] = useState(filters?.search || ''); const [statusFilter, setStatusFilter] = useState(filters?.status || 'all'); const [priorityFilter, setPriorityFilter] = useState(filters?.priority || 'all'); const handleSearch = (e) => { e.preventDefault(); applyFilters({ search: searchQuery, status: statusFilter, priority: priorityFilter, }); }; const applyFilters = (newFilters) => { router.get('/admin/tickets', newFilters, { preserveState: true, replace: true, }); }; const handleFilterChange = (key, value) => { if (key === 'status') { setStatusFilter(value); applyFilters({ search: searchQuery, status: value, priority: priorityFilter }); } else if (key === 'priority') { setPriorityFilter(value); applyFilters({ search: searchQuery, status: statusFilter, priority: value }); } }; // Calculate metrics locally from the tickets list const totalTickets = tickets.length; const openTickets = tickets.filter(t => t.status === 'open').length; const inProgressTickets = tickets.filter(t => t.status === 'in_progress').length; const resolvedTickets = tickets.filter(t => t.status === 'resolved' || t.status === 'closed').length; const getStatusBadge = (status) => { switch (status) { case 'open': return ( Open ); case 'in_progress': return ( In Progress ); case 'resolved': return ( Resolved ); case 'closed': return ( Closed ); default: return {status}; } }; const getPriorityBadge = (priority) => { switch (priority) { case 'high': return ( High ); case 'medium': return ( Medium ); case 'low': return ( Low ); default: return {priority}; } }; return (
{/* Header Row */}

Support Ticket Center

Review user issues, update priorities, and generate Senior Developer support responses.

{/* Upper Metric Cards */}
{/* Metric 1 */}
Total Tickets {totalTickets} All-time received tickets
{/* Metric 2 */}
New / Open {openTickets} Needs immediate reply
{/* Metric 3 */}
In Progress {inProgressTickets} Active investigation
{/* Metric 4 */}
Resolved / Closed {resolvedTickets} Archived cleanly
{/* Frequently Asked Questions */}

Frequently Asked Questions

{/* FAQ 1 */}

How long does a ticket resolution take?

For priority high tickets, our engineering support response is typically under 2 hours. General queries resolve within 24 hours.

{/* FAQ 2 */}

What is Tadbeer contract compliance?

All worker hirings conform to MOHRE Tadbeer rules. Contracts are electronically generated and uploaded for review.

{/* Filters Row */}
{/* Search form */}
setSearchQuery(e.target.value)} className="bg-white border border-slate-200 pl-10 pr-4 py-2 rounded-xl text-xs font-semibold focus:outline-none focus:ring-2 focus:ring-[#185FA5]/20 w-full shadow-sm" /> {/* Dropdown Filters */}
{/* Table listing */}
{tickets.map((ticket) => ( ))} {tickets.length === 0 && ( )}
Ticket Number Subject Raised By Priority Status Created At Actions
{ticket.ticket_number} {ticket.subject}
{ticket.creator_name} {ticket.user_type}
{getPriorityBadge(ticket.priority)} {getStatusBadge(ticket.status)} {ticket.created_at} Manage
No support tickets found matching criteria
); }