(null)
const { data, isLoading, isError, refetch } = useQuery({
queryKey: ['my-tickets', page],
@@ -44,7 +47,7 @@ export function SupportTicketList() {
{data && data.items.length > 0 && (
{data.items.map((ticket) => (
- setSelectedTicketId(ticket.id)}>
+ navigate({ search: { ticket: ticket.id } })}>
{t(`support.type.${ticket.type}`)}
@@ -71,7 +74,7 @@ export function SupportTicketList() {
)}
{selectedTicketId && (
- !open && setSelectedTicketId(null)} />
+ !open && navigate({ search: {} })} />
)}
)
diff --git a/frontend/src/routes/support.tsx b/frontend/src/routes/support.tsx
index 5d1db52..465eb57 100644
--- a/frontend/src/routes/support.tsx
+++ b/frontend/src/routes/support.tsx
@@ -3,7 +3,14 @@ import { useTranslation } from 'react-i18next'
import { useRequireActivated } from '@/features/auth/guards'
import { SupportTicketList } from '@/features/support/SupportTicketList'
-export const Route = createFileRoute('/support')({ component: SupportPage })
+export const Route = createFileRoute('/support')({
+ component: SupportPage,
+ // Ссылка из Telegram-уведомления об изменении статуса тикета ведёт на этот же роут с
+ // ?ticket= — отдельного роута на конкретный тикет нет, он открывается диалогом поверх списка.
+ validateSearch: (search: Record): { ticket?: string } => ({
+ ticket: typeof search.ticket === 'string' ? search.ticket : undefined,
+ }),
+})
function SupportPage() {
const { t } = useTranslation()