-
+ {/* Show back button only on web, not in Telegram Mini App */}
+ {!capabilities.hasBackButton && (
+
+ )}
diff --git a/src/pages/AdminRemnawaveSquadDetail.tsx b/src/pages/AdminRemnawaveSquadDetail.tsx
index 0fa9f82..a4383a6 100644
--- a/src/pages/AdminRemnawaveSquadDetail.tsx
+++ b/src/pages/AdminRemnawaveSquadDetail.tsx
@@ -4,6 +4,7 @@ import { useTranslation } from 'react-i18next';
import { adminRemnawaveApi, SquadWithLocalInfo } from '../api/adminRemnawave';
import { AdminBackButton } from '../components/admin';
import { ServerIcon, UsersIcon, CheckIcon, XIcon } from '../components/icons';
+import { useBackButton } from '../platform/hooks/useBackButton';
// Country flags helper
const getCountryFlag = (code: string | null | undefined): string => {
@@ -54,6 +55,8 @@ export default function AdminRemnawaveSquadDetail() {
const { uuid } = useParams<{ uuid: string }>();
const navigate = useNavigate();
+ useBackButton(() => navigate('/admin/remnawave'));
+
// Fetch all squads and find the one we need
const {
data: squadsData,
diff --git a/src/pages/AdminServerEdit.tsx b/src/pages/AdminServerEdit.tsx
index 9dea960..2ad4e04 100644
--- a/src/pages/AdminServerEdit.tsx
+++ b/src/pages/AdminServerEdit.tsx
@@ -6,6 +6,7 @@ import { serversApi, ServerUpdateRequest } from '../api/servers';
import { AdminBackButton } from '../components/admin';
import { ServerIcon } from '../components/icons';
import { createNumberInputHandler, toNumber } from '../utils/inputHelpers';
+import { useBackButton } from '../platform/hooks/useBackButton';
// Country flags (simple emoji mapping)
const getCountryFlag = (code: string | null): string => {
@@ -48,6 +49,8 @@ export default function AdminServerEdit() {
const serverId = parseInt(id || '0');
+ useBackButton(() => navigate('/admin/servers'));
+
const {
data: server,
isLoading,
diff --git a/src/pages/AdminServers.tsx b/src/pages/AdminServers.tsx
index 348a2ad..941a49f 100644
--- a/src/pages/AdminServers.tsx
+++ b/src/pages/AdminServers.tsx
@@ -2,8 +2,22 @@ import { useNavigate } from 'react-router-dom';
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { useTranslation } from 'react-i18next';
import { serversApi, ServerListItem } from '../api/servers';
-import { AdminBackButton } from '../components/admin';
import { SyncIcon, EditIcon, CheckIcon, XIcon, UsersIcon, GiftIcon } from '../components/icons';
+import { useBackButton } from '../platform/hooks/useBackButton';
+import { usePlatform } from '../platform/hooks/usePlatform';
+
+// BackIcon
+const BackIcon = () => (
+
+);
// Country flags (simple emoji mapping)
const getCountryFlag = (code: string | null): string => {
@@ -42,6 +56,10 @@ export default function AdminServers() {
const { t } = useTranslation();
const navigate = useNavigate();
const queryClient = useQueryClient();
+ const { capabilities } = usePlatform();
+
+ // Use native Telegram back button in Mini App
+ useBackButton(() => navigate('/admin'));
// Queries
const { data: serversData, isLoading } = useQuery({
@@ -79,7 +97,15 @@ export default function AdminServers() {
{/* Header */}
-
+ {/* Show back button only on web, not in Telegram Mini App */}
+ {!capabilities.hasBackButton && (
+
+ )}
{t('admin.servers.title')}
{t('admin.servers.subtitle')}
diff --git a/src/pages/AdminSettings.tsx b/src/pages/AdminSettings.tsx
index 1ac3640..8e145ff 100644
--- a/src/pages/AdminSettings.tsx
+++ b/src/pages/AdminSettings.tsx
@@ -1,10 +1,13 @@
import { useState, useMemo, useEffect, useCallback } from 'react';
+import { useNavigate } from 'react-router-dom';
import { useQuery } from '@tanstack/react-query';
import { useTranslation } from 'react-i18next';
import { adminSettingsApi, SettingDefinition } from '../api/adminSettings';
import { themeColorsApi } from '../api/themeColors';
import { useFavoriteSettings } from '../hooks/useFavoriteSettings';
-import { MENU_SECTIONS, MenuItem, formatSettingKey, AdminBackButton } from '../components/admin';
+import { MENU_SECTIONS, MenuItem, formatSettingKey } from '../components/admin';
+import { useBackButton } from '../platform/hooks/useBackButton';
+import { usePlatform } from '../platform/hooks/usePlatform';
import { AnalyticsTab } from '../components/admin/AnalyticsTab';
import { BrandingTab } from '../components/admin/BrandingTab';
import { ThemeTab } from '../components/admin/ThemeTab';
@@ -17,6 +20,19 @@ import {
SettingsSearchResults,
} from '../components/admin/SettingsSearch';
+// BackIcon
+const BackIcon = () => (
+
+);
+
// Find section ID by category key
function findSectionByCategory(categoryKey: string): string | null {
for (const section of MENU_SECTIONS) {
@@ -31,6 +47,11 @@ function findSectionByCategory(categoryKey: string): string | null {
export default function AdminSettings() {
const { t } = useTranslation();
+ const navigate = useNavigate();
+ const { capabilities } = usePlatform();
+
+ // Use native Telegram back button in Mini App
+ useBackButton(() => navigate('/admin'));
// State
const [activeSection, setActiveSection] = useState('branding');
@@ -216,7 +237,15 @@ export default function AdminSettings() {
-
+ {/* Show back button only on web, not in Telegram Mini App */}
+ {!capabilities.hasBackButton && (
+
+ )}
{t('admin.settings.title')}
diff --git a/src/pages/AdminTariffCreate.tsx b/src/pages/AdminTariffCreate.tsx
index f026374..af70c84 100644
--- a/src/pages/AdminTariffCreate.tsx
+++ b/src/pages/AdminTariffCreate.tsx
@@ -12,6 +12,7 @@ import {
} from '../api/tariffs';
import { AdminBackButton } from '../components/admin';
import { createNumberInputHandler, toNumber } from '../utils/inputHelpers';
+import { useBackButton } from '../platform/hooks/useBackButton';
// Icons
const PlusIcon = () => (
@@ -91,6 +92,8 @@ export default function AdminTariffCreate() {
const queryClient = useQueryClient();
const isEdit = !!id;
+ useBackButton(() => navigate('/admin/tariffs'));
+
// Step: null = type selection, 'period' or 'daily' = form
const [tariffType, setTariffType] = useState
(null);
diff --git a/src/pages/AdminTariffs.tsx b/src/pages/AdminTariffs.tsx
index 5bf44c1..55850c6 100644
--- a/src/pages/AdminTariffs.tsx
+++ b/src/pages/AdminTariffs.tsx
@@ -2,8 +2,9 @@ import { useNavigate } from 'react-router-dom';
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { useTranslation } from 'react-i18next';
import { tariffsApi, TariffListItem } from '../api/tariffs';
-import { AdminBackButton } from '../components/admin';
import { useDestructiveConfirm, useNotify } from '@/platform';
+import { useBackButton } from '../platform/hooks/useBackButton';
+import { usePlatform } from '../platform/hooks/usePlatform';
// Icons
const PlusIcon = () => (
@@ -54,12 +55,29 @@ const GiftIcon = () => (
);
+// BackIcon
+const BackIcon = () => (
+
+);
+
export default function AdminTariffs() {
const { t } = useTranslation();
const navigate = useNavigate();
const queryClient = useQueryClient();
const confirmDelete = useDestructiveConfirm();
const notify = useNotify();
+ const { capabilities } = usePlatform();
+
+ // Use native Telegram back button in Mini App
+ useBackButton(() => navigate('/admin'));
// Queries
const { data: tariffsData, isLoading } = useQuery({
@@ -117,7 +135,15 @@ export default function AdminTariffs() {
{/* Header */}
-
+ {/* Show back button only on web, not in Telegram Mini App */}
+ {!capabilities.hasBackButton && (
+
+ )}
{t('admin.tariffs.title')}
{t('admin.tariffs.subtitle')}
diff --git a/src/pages/AdminTicketSettings.tsx b/src/pages/AdminTicketSettings.tsx
index f6e9c9c..72df75e 100644
--- a/src/pages/AdminTicketSettings.tsx
+++ b/src/pages/AdminTicketSettings.tsx
@@ -4,6 +4,7 @@ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { useTranslation } from 'react-i18next';
import { adminApi } from '../api/admin';
import { AdminBackButton } from '../components/admin';
+import { useBackButton } from '../platform/hooks/useBackButton';
const SettingsIcon = () => (