From 8d4c00d176572c84169be50f03934d3521854038 Mon Sep 17 00:00:00 2001 From: PEDZEO Date: Wed, 21 Jan 2026 04:31:07 +0300 Subject: [PATCH] Add SettingsSidebar and SettingsSearch components to AdminSettings - Introduced SettingsSidebar for improved navigation and organization. - Added SettingsSearch and its mobile variant for enhanced search functionality. - Updated AdminSettings to utilize new components, streamlining the layout and improving user experience. --- src/components/admin/SettingsSearch.tsx | 4 +- src/components/admin/index.ts | 2 + src/pages/AdminSettings.tsx | 151 ++++-------------------- 3 files changed, 28 insertions(+), 129 deletions(-) diff --git a/src/components/admin/SettingsSearch.tsx b/src/components/admin/SettingsSearch.tsx index 25d6384..b59685b 100644 --- a/src/components/admin/SettingsSearch.tsx +++ b/src/components/admin/SettingsSearch.tsx @@ -4,10 +4,10 @@ import { SearchIcon, CloseIcon } from './icons' interface SettingsSearchProps { searchQuery: string setSearchQuery: (query: string) => void - resultsCount: number + resultsCount?: number } -export function SettingsSearch({ searchQuery, setSearchQuery, resultsCount }: SettingsSearchProps) { +export function SettingsSearch({ searchQuery, setSearchQuery }: SettingsSearchProps) { const { t } = useTranslation() return ( diff --git a/src/components/admin/index.ts b/src/components/admin/index.ts index 82a4f6a..1d6357d 100644 --- a/src/components/admin/index.ts +++ b/src/components/admin/index.ts @@ -7,6 +7,8 @@ export * from './BrandingTab' export * from './ThemeTab' export * from './FavoritesTab' export * from './SettingsTab' +export * from './SettingsSidebar' +export * from './SettingsSearch' // Constants and utils export * from './constants' diff --git a/src/pages/AdminSettings.tsx b/src/pages/AdminSettings.tsx index 5e57acd..2276df8 100644 --- a/src/pages/AdminSettings.tsx +++ b/src/pages/AdminSettings.tsx @@ -1,23 +1,21 @@ import { useState, useMemo } from 'react' import { useQuery } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' -import { Link } from 'react-router-dom' import { adminSettingsApi, SettingDefinition } from '../api/adminSettings' import { themeColorsApi } from '../api/themeColors' import { useFavoriteSettings } from '../hooks/useFavoriteSettings' import { - BackIcon, - SearchIcon, - StarIcon, - CloseIcon, MenuIcon, MENU_SECTIONS, - MenuItem + MenuItem, + formatSettingKey } from '../components/admin' import { BrandingTab } from '../components/admin/BrandingTab' import { ThemeTab } from '../components/admin/ThemeTab' import { FavoritesTab } from '../components/admin/FavoritesTab' import { SettingsTab } from '../components/admin/SettingsTab' +import { SettingsSidebar } from '../components/admin/SettingsSidebar' +import { SettingsSearch, SettingsSearchMobile, SettingsSearchResults } from '../components/admin/SettingsSearch' export default function AdminSettings() { const { t } = useTranslation() @@ -72,15 +70,6 @@ export default function AdminSettings() { })) }, [currentMenuItem, allSettings, t]) - // Helper to format setting key for translation lookup - const formatSettingKey = (name: string): string => { - return name - .replace(/_/g, ' ') - .split(' ') - .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) - .join(' ') - } - // Filter settings for search - GLOBAL search across all settings const filteredSettings = useMemo(() => { if (!allSettings || !Array.isArray(allSettings) || !searchQuery) return [] @@ -172,63 +161,13 @@ export default function AdminSettings() { )} {/* Sidebar */} - + {/* Main content */}
@@ -248,64 +187,22 @@ export default function AdminSettings() {
- {/* Search - desktop */} -
- setSearchQuery(e.target.value)} - placeholder={t('admin.settings.searchPlaceholder')} - className="w-48 lg:w-64 pl-10 pr-10 py-2 rounded-xl bg-dark-800 border border-dark-700 text-dark-100 placeholder-dark-500 focus:outline-none focus:border-accent-500 text-sm" - /> -
- -
- {searchQuery && ( - - )} -
-
- - {/* Search - mobile */} -
- setSearchQuery(e.target.value)} - placeholder={t('admin.settings.searchPlaceholder')} - className="w-full pl-10 pr-10 py-2 rounded-xl bg-dark-800 border border-dark-700 text-dark-100 placeholder-dark-500 focus:outline-none focus:border-accent-500 text-sm" + -
- -
- {searchQuery && ( - - )}
- {/* Search results count */} - {searchQuery.trim() && ( -
- - {filteredSettings.length > 0 - ? `Найдено: ${filteredSettings.length}` - : 'Ничего не найдено'} - - {filteredSettings.length > 0 && ( - по запросу «{searchQuery}» - )} -
- )} + + + {/* Content */}