From 86679455012cb83a9f3f44c3513b9b8ed266eab3 Mon Sep 17 00:00:00 2001 From: PEDZEO Date: Sun, 18 Jan 2026 07:42:29 +0300 Subject: [PATCH] Implement back navigation in admin pages by adding a BackIcon and linking to the admin dashboard across multiple components. --- src/pages/AdminApps.tsx | 14 +++++++++++++- src/pages/AdminBanSystem.tsx | 16 ++++++++++------ src/pages/AdminBroadcasts.tsx | 16 +++++++++++++--- src/pages/AdminCampaigns.tsx | 16 ++++++++++------ src/pages/AdminDashboard.tsx | 16 ++++++++++------ src/pages/AdminPromoOffers.tsx | 16 ++++++++++------ src/pages/AdminPromocodes.tsx | 16 ++++++++++------ src/pages/AdminServers.tsx | 16 ++++++++++------ src/pages/AdminSettings.tsx | 14 +++++++++++++- src/pages/AdminTariffs.tsx | 16 ++++++++++------ src/pages/AdminTickets.tsx | 17 ++++++++++++++++- src/pages/AdminUsers.tsx | 16 +++++++--------- src/pages/AdminWheel.tsx | 21 ++++++++++++++++++--- 13 files changed, 150 insertions(+), 60 deletions(-) diff --git a/src/pages/AdminApps.tsx b/src/pages/AdminApps.tsx index 2ff0b12..0a25598 100644 --- a/src/pages/AdminApps.tsx +++ b/src/pages/AdminApps.tsx @@ -1,6 +1,7 @@ import { useState, useRef } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' +import { Link } from 'react-router-dom' import { adminAppsApi, AppDefinition, @@ -14,6 +15,12 @@ import { } from '../api/adminApps' // Icons +const BackIcon = () => ( + + + +) + const AppsIcon = () => ( @@ -640,7 +647,12 @@ export default function AdminApps() {
- + + +

{t('admin.apps.title')}

diff --git a/src/pages/AdminBanSystem.tsx b/src/pages/AdminBanSystem.tsx index 99a87c7..08a442f 100644 --- a/src/pages/AdminBanSystem.tsx +++ b/src/pages/AdminBanSystem.tsx @@ -1,5 +1,6 @@ import { useState, useEffect, useCallback } from 'react' import { useTranslation } from 'react-i18next' +import { Link } from 'react-router-dom' import { banSystemApi, type BanSystemStatus, @@ -18,9 +19,9 @@ import { } from '../api/banSystem' // Icons -const ShieldIcon = () => ( - - +const BackIcon = () => ( + + ) @@ -396,9 +397,12 @@ export default function AdminBanSystem() { {/* Header */}
-
- -
+ + +

{t('banSystem.title')}

{t('banSystem.subtitle')}

diff --git a/src/pages/AdminBroadcasts.tsx b/src/pages/AdminBroadcasts.tsx index 1451d5f..9618bd6 100644 --- a/src/pages/AdminBroadcasts.tsx +++ b/src/pages/AdminBroadcasts.tsx @@ -1,6 +1,7 @@ import { useState, useRef, useMemo } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' +import { Link } from 'react-router-dom' import { adminBroadcastsApi, Broadcast, @@ -10,6 +11,12 @@ import { } from '../api/adminBroadcasts' // Icons +const BackIcon = () => ( + + + +) + const BroadcastIcon = () => ( @@ -618,9 +625,12 @@ export default function AdminBroadcasts() { {/* Header */}
-
- -
+ + +

{t('admin.broadcasts.title')}

{t('admin.broadcasts.subtitle')}

diff --git a/src/pages/AdminCampaigns.tsx b/src/pages/AdminCampaigns.tsx index d3ab946..a7a7fe6 100644 --- a/src/pages/AdminCampaigns.tsx +++ b/src/pages/AdminCampaigns.tsx @@ -1,5 +1,6 @@ import { useState } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' +import { Link } from 'react-router-dom' import { campaignsApi, CampaignListItem, @@ -14,9 +15,9 @@ import { } from '../api/campaigns' // Icons -const CampaignIcon = () => ( - - +const BackIcon = () => ( + + ) @@ -741,9 +742,12 @@ export default function AdminCampaigns() { {/* Header */}
-
- -
+ + +

Рекламные кампании

Управление рекламными ссылками

diff --git a/src/pages/AdminDashboard.tsx b/src/pages/AdminDashboard.tsx index 97b0956..6a8e6c9 100644 --- a/src/pages/AdminDashboard.tsx +++ b/src/pages/AdminDashboard.tsx @@ -1,12 +1,13 @@ import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' +import { Link } from 'react-router-dom' import { statsApi, type DashboardStats, type NodeStatus } from '../api/admin' import { useCurrency } from '../hooks/useCurrency' // Icons -const ChartIcon = () => ( - - +const BackIcon = () => ( + + ) @@ -292,9 +293,12 @@ export default function AdminDashboard() { {/* Header */}
-
- -
+ + +

{t('adminDashboard.title')}

{t('adminDashboard.subtitle')}

diff --git a/src/pages/AdminPromoOffers.tsx b/src/pages/AdminPromoOffers.tsx index 3e265b4..fe00d0f 100644 --- a/src/pages/AdminPromoOffers.tsx +++ b/src/pages/AdminPromoOffers.tsx @@ -1,5 +1,6 @@ import { useState } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' +import { Link } from 'react-router-dom' import { promoOffersApi, PromoOfferTemplate, @@ -12,9 +13,9 @@ import { } from '../api/promoOffers' // Icons -const GiftIcon = () => ( - - +const BackIcon = () => ( + + ) @@ -576,9 +577,12 @@ export default function AdminPromoOffers() { {/* Header */}
-
- -
+ + +

Промопредложения

Шаблоны, рассылка и логи предложений

diff --git a/src/pages/AdminPromocodes.tsx b/src/pages/AdminPromocodes.tsx index 12575cd..ab7122d 100644 --- a/src/pages/AdminPromocodes.tsx +++ b/src/pages/AdminPromocodes.tsx @@ -1,5 +1,6 @@ import { useState } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' +import { Link } from 'react-router-dom' import { promocodesApi, PromoCode, @@ -13,9 +14,9 @@ import { } from '../api/promocodes' // Icons -const TicketIcon = () => ( - - +const BackIcon = () => ( + + ) @@ -800,9 +801,12 @@ export default function AdminPromocodes() { {/* Header */}
-
- -
+ + +

Промокоды

Управление промокодами и группами скидок

diff --git a/src/pages/AdminServers.tsx b/src/pages/AdminServers.tsx index 3709ffa..c715d0d 100644 --- a/src/pages/AdminServers.tsx +++ b/src/pages/AdminServers.tsx @@ -1,6 +1,7 @@ import { useState } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' +import { Link } from 'react-router-dom' import { serversApi, ServerListItem, @@ -9,9 +10,9 @@ import { } from '../api/servers' // Icons -const ServerIcon = () => ( - - +const BackIcon = () => ( + + ) @@ -322,9 +323,12 @@ export default function AdminServers() { {/* Header */}
-
- -
+ + +

{t('admin.servers.title')}

{t('admin.servers.subtitle')}

diff --git a/src/pages/AdminSettings.tsx b/src/pages/AdminSettings.tsx index 7dff564..e8cfa56 100644 --- a/src/pages/AdminSettings.tsx +++ b/src/pages/AdminSettings.tsx @@ -1,6 +1,7 @@ import { useState, useMemo, useRef } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' +import { Link } from 'react-router-dom' import { adminSettingsApi, SettingDefinition, SettingCategorySummary } from '../api/adminSettings' import { brandingApi } from '../api/branding' import { themeColorsApi } from '../api/themeColors' @@ -10,6 +11,12 @@ import { applyThemeColors } from '../hooks/useThemeColors' import { updateEnabledThemesCache } from '../hooks/useTheme' // Icons +const BackIcon = () => ( + + + +) + const CogIcon = () => ( @@ -1033,7 +1040,12 @@ export default function AdminSettings() {
{/* Header */}
- + + +

{t('admin.settings.title')}

diff --git a/src/pages/AdminTariffs.tsx b/src/pages/AdminTariffs.tsx index 8994e94..7c7d514 100644 --- a/src/pages/AdminTariffs.tsx +++ b/src/pages/AdminTariffs.tsx @@ -1,6 +1,7 @@ import { useState } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' +import { Link } from 'react-router-dom' import { tariffsApi, TariffListItem, @@ -13,9 +14,9 @@ import { } from '../api/tariffs' // Icons -const TariffIcon = () => ( - - +const BackIcon = () => ( + + ) @@ -1187,9 +1188,12 @@ export default function AdminTariffs() { {/* Header */}

-
- -
+ + +

{t('admin.tariffs.title')}

{t('admin.tariffs.subtitle')}

diff --git a/src/pages/AdminTickets.tsx b/src/pages/AdminTickets.tsx index 83f2d9c..9d6b622 100644 --- a/src/pages/AdminTickets.tsx +++ b/src/pages/AdminTickets.tsx @@ -1,9 +1,16 @@ import { useState, useEffect } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' +import { Link } from 'react-router-dom' import { adminApi, AdminTicket, AdminTicketDetail, AdminTicketMessage } from '../api/admin' import { ticketsApi } from '../api/tickets' +const BackIcon = () => ( + + + +) + function AdminMessageMedia({ message, t }: { message: AdminTicketMessage; t: (key: string) => string }) { const [imageLoaded, setImageLoaded] = useState(false) const [imageError, setImageError] = useState(false) @@ -175,7 +182,15 @@ export default function AdminTickets() { return (
-

{t('admin.tickets.title')}

+
+ + + +

{t('admin.tickets.title')}

+