import React, { useState } from 'react'; import { Head, router } from '@inertiajs/react'; import AdminLayout from '@/Layouts/AdminLayout'; import { Scale, MessageSquare, Download, BadgeDollarSign, AlertCircle, CheckCircle, FileText, ArrowRight, ArrowUpRight, User, ShieldCheck, Send, Search, ChevronDown, MoreVertical, Clock, Eye, Plus, X, Folder, AlertTriangle, Hourglass } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; export default function DisputesHub({ tickets }) { const [selectedTicket, setSelectedTicket] = useState(null); const [isWorkspaceOpen, setIsWorkspaceOpen] = useState(false); // Notes / Resolution states const [internalNote, setInternalNote] = useState(''); const [resolutionAction, setResolutionAction] = useState('refund_employer'); const [resolutionSummary, setResolutionSummary] = useState(''); // Filters const [searchQuery, setSearchQuery] = useState(''); const [statusFilter, setStatusFilter] = useState('All Status'); const [priorityFilter, setPriorityFilter] = useState('All Priority'); const [typeFilter, setTypeFilter] = useState('All Types'); const [sortBy, setSortBy] = useState('Newest First'); const handleAddNote = (e) => { e.preventDefault(); if (!internalNote.trim() || !selectedTicket) return; router.post(`/admin/disputes/${selectedTicket.id}/add-note`, { note: internalNote }, { onSuccess: () => { selectedTicket.admin_notes += "\n• " + internalNote; setInternalNote(''); } }); }; const handleResolve = (e) => { if (e) e.preventDefault(); if (!selectedTicket) return; router.post(`/admin/disputes/${selectedTicket.id}/resolve`, { resolution: internalNote || 'Resolved by mediator', action_taken: 'close_ticket' }, { onSuccess: () => { selectedTicket.status = 'Resolved'; setIsWorkspaceOpen(false); setSelectedTicket(null); setInternalNote(''); } }); }; // Filter tickets const filteredTickets = (tickets || []).filter(ticket => { // Status filter if (statusFilter !== 'All Status' && ticket.status !== statusFilter) return false; // Priority filter if (priorityFilter !== 'All Priority' && ticket.priority !== priorityFilter) return false; // Type filter if (typeFilter !== 'All Types' && ticket.type !== typeFilter) return false; // Search query if (searchQuery.trim() !== '') { const query = searchQuery.toLowerCase(); return ( ticket.id.toLowerCase().includes(query) || ticket.party_one_name.toLowerCase().includes(query) || ticket.party_two_name.toLowerCase().includes(query) || ticket.reason.toLowerCase().includes(query) ); } return true; }); return (
{/* Header Row */}

Help & Support

Handle complaints and resolve disputes between workers and employers.

{/* Upper Row Metric Cards */}
{/* Card 1: Total Disputes */}
Total Disputes 36 ↑ 8% from last 30 days
{/* Card 2: Open */}
Open 12 Needs attention
{/* Card 3: Under Review */}
Under Review 10 In progress
{/* Card 4: Resolved */}
Resolved 8 This period
{/* Table / Filters Section */}
{/* Filters Header */}
{/* Left search */}
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-[#0F6E56]/20 w-full shadow-sm" />
{/* Right filters */}
{/* Table Row Content */}
{filteredTickets.map((ticket) => ( ))} {filteredTickets.length === 0 && ( )}
Dispute ID Raised By Type Reason Status Created At Actions
{ticket.id}
{ticket.party_one_name}
{ticket.party_one_name} {ticket.party_one_role}
{ticket.type} {ticket.reason} {ticket.status} {ticket.created_at}
No active disputes found matching your criteria.
{/* Premium Full Detailed Investigation Workspace Sidebar Drawer */} {isWorkspaceOpen && selectedTicket && (
{/* Drawer Header */}

Dispute Resolution Case: {selectedTicket.id}

Assigned Mediator: {selectedTicket.assigned_to}

{/* Drawer Body Scroll Container */}
{/* Case Header Details Banner */}
Parties {selectedTicket.party_one_name} ({selectedTicket.party_one_role}) vs {selectedTicket.party_two_name} ({selectedTicket.party_two_role})
Dispute Type {selectedTicket.type} {selectedTicket.reason}
Case Status Status: {selectedTicket.status}
Created Date {selectedTicket.created_at} Case active since last update
{/* Dual Panel Workspace */}
{/* Chat Log Transcript */}

Direct Chat logs Transcript

Official authenticated conversation history audits

{/* Scroll thread */}
{selectedTicket.chat_logs.map((log, i) => { const isMediator = log.sender === 'Mediator (Admin)'; const isPartyTwo = log.sender === selectedTicket.party_two_name; return (
{log.sender} • {log.time}

{log.message}

); })}
Logs Digitally Secured by UAE Verification Compliance
{/* Tools panel */}
{/* Evidence Files */}

Case Evidence Files

{selectedTicket.evidence?.map((file, i) => (
{file.name} ({file.type})
View
))}
{/* Simplified Action Panel */}

Mediator Reply & Actions

Send a message to both parties or resolve the dispute.