import React, { useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Card, Descriptions, Spin, Button, Tag, Space, Form, Select, Input } from 'antd'; import { Link } from 'react-router-dom'; import { useTicket, useUpdateTicket } from '../../hooks/useTickets'; import { useUser } from '../../hooks/useUsers'; import { useAdmin, useAdmins } from '../../hooks/useAdmins'; import dayjs from 'dayjs'; const TicketDetailPage: React.FC = () => { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const { data: ticket, isLoading } = useTicket(id || ''); const updateTicket = useUpdateTicket(); const [form] = Form.useForm(); const { data: admins, isLoading: loadingAdmins } = useAdmins({ limit: 1000, offset: 0 }); const reporterId = ticket?.reporter_id; const { data: reporter, isLoading: loadingReporter } = useUser(reporterId || ''); const assignedId = ticket?.assigned_to; const { data: assignedAdmin, isLoading: loadingAssigned } = useAdmin(assignedId || ''); useEffect(() => { if (ticket) { form.setFieldsValue({ status: ticket.status, assigned_to: !isBadValue(ticket.assigned_to) ? ticket.assigned_to : undefined, resolution_note: !isBadValue(ticket.resolution_note) ? ticket.resolution_note : '', }); } }, [ticket, form]); const handleSave = () => { form.validateFields().then((values) => { const payload = Object.fromEntries( Object.entries(values).filter(([_, v]) => v !== '' && v !== undefined && v !== null) ); updateTicket.mutate( { id: id!, data: payload }, { onSuccess: () => navigate('/tickets') } ); }); }; const isBadValue = (val: any) => val === '-' || val === 'undefined' || val === '' || val === null || val === undefined; const formatDate = (dateStr: string) => { if (isBadValue(dateStr)) return '-'; const d = dayjs(dateStr); return d.isValid() ? d.format('DD.MM.YYYY HH:mm') : dateStr; }; const getUserLink = () => { if (loadingReporter) return ; if (!reporter) return reporterId || '-'; const name = reporter.nickname && !isBadValue(reporter.nickname) ? reporter.nickname : reporter.email; return {name || reporter.id}; }; if (isLoading) return ; if (!ticket) return

Тикет не найден

; return ( {ticket.id} {getUserLink()} {ticket.error_hash} {ticket.error_message}
                        {isBadValue(ticket.stacktrace) ? '-' : ticket.stacktrace}
                    
{isBadValue(ticket.context) ? '-' : ticket.context} {ticket.count} {formatDate(ticket.first_seen)} {formatDate(ticket.last_seen)} {ticket.status} {loadingAssigned ? : ( assignedAdmin ? ( {!isBadValue(assignedAdmin.nickname) ? assignedAdmin.nickname : assignedAdmin.email || assignedAdmin.id} ) : (isBadValue(ticket.assigned_to) ? '-' : ticket.assigned_to) )} {isBadValue(ticket.resolution_note) ? '-' : ticket.resolution_note}
); }; export default TicketDetailPage;