import { useState, useEffect } from 'react'; import { MessageSquare, Plus, Clock, CheckCircle, AlertCircle } from 'lucide-react'; import axios from 'axios'; import { API_URL } from '../config'; import TicketChat from './TicketChat'; import CreateTicketModal from './CreateTicketModal'; export default function Tickets({ token, user, theme }) { const [tickets, setTickets] = useState([]); const [selectedTicket, setSelectedTicket] = useState(null); const [showCreateModal, setShowCreateModal] = useState(false); const [loading, setLoading] = useState(true); useEffect(() => { loadTickets(); const interval = setInterval(loadTickets, 5000); return () => clearInterval(interval); }, []); const loadTickets = async () => { try { const { data } = await axios.get(`${API_URL}/api/tickets`, { headers: { Authorization: `Bearer ${token}` } }); setTickets(data); setLoading(false); } catch (error) { console.error('Ошибка загрузки тикетов:', error); setLoading(false); } }; const handleTicketCreated = () => { setShowCreateModal(false); loadTickets(); }; const getStatusIcon = (status) => { switch (status) { case 'pending': return ; case 'in_progress': return ; case 'closed': return ; default: return ; } }; const getStatusText = (status) => { switch (status) { case 'pending': return 'На рассмотрении'; case 'in_progress': return 'В работе'; case 'closed': return 'Закрыт'; default: return status; } }; const getStatusColor = (status) => { switch (status) { case 'pending': return 'bg-yellow-500/20 text-yellow-500 border-yellow-500/50'; case 'in_progress': return 'bg-blue-500/20 text-blue-500 border-blue-500/50'; case 'closed': return 'bg-green-500/20 text-green-500 border-green-500/50'; default: return 'bg-gray-500/20 text-gray-500 border-gray-500/50'; } }; if (selectedTicket) { return ( { setSelectedTicket(null); loadTickets(); }} /> ); } return (
{/* Header */}

Тикеты

Система поддержки

{/* Tickets List */} {loading ? (

Загрузка тикетов...

) : tickets.length === 0 ? (

Нет тикетов

Создайте первый тикет для обращения в поддержку

) : (
{tickets.map((ticket) => (
setSelectedTicket(ticket)} className={`${theme.card} ${theme.border} border rounded-2xl p-6 cursor-pointer ${theme.hover} transition-all duration-200`} >

{ticket.title}

{ticket.description}

{getStatusIcon(ticket.status)} {getStatusText(ticket.status)}
Автор: {ticket.author} Сообщений: {ticket.messages?.length || 0} {new Date(ticket.created_at).toLocaleString('ru-RU')}
))}
)}
{showCreateModal && ( setShowCreateModal(false)} onCreated={handleTicketCreated} /> )}
); }