diff --git a/frontend/src/App.css b/frontend/src/App.css index a1b14bf..805fdb4 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -336,6 +336,16 @@ min-width: 0; } +/* Страница настроек — боковое меню в стиле Tabler Settings */ +.settings-sidebar-nav .list-group-item { + font-size: 0.875rem; + padding-left: 0; +} +.settings-sidebar-nav .dropdown-header { + font-size: 0.6875rem; + letter-spacing: 0.04em; +} + /* Responsive navbar */ @media (max-width: 991.98px) { .navbar-collapse { diff --git a/frontend/src/SettingsPage.jsx b/frontend/src/SettingsPage.jsx index 3c808ae..ec479f3 100644 --- a/frontend/src/SettingsPage.jsx +++ b/frontend/src/SettingsPage.jsx @@ -20,14 +20,30 @@ import ServerAutocompleteInput from './components/ServerAutocompleteInput.jsx'; * Страница «Настройки интерфейса» — отдельный раздел в стиле Tabler UI и UniFi: * коллапсируемые карточки-секции, иконки, чёткая структура. */ -// Разделы бокового меню (как в Tabler / UniFi) -const SIDEBAR_SECTIONS = [ - { id: 'live-doh', title: 'BGP Live и DoH', icon: IconPlugConnected }, - { id: 'network-as', title: 'Сеть и AS', icon: IconNetwork }, - { id: 'ping', title: 'Пинг через MikroTik', icon: IconCloud }, - { id: 'ping-services', title: 'Пинг на главной', icon: IconChartPie }, - { id: 'ptr-zone', title: 'PTR зона', icon: IconWorld }, +// Разделы бокового меню с группами (как Tabler Settings: Business settings / Experience) +const SIDEBAR_GROUPS = [ + { + title: 'Подключения и сеть', + items: [ + { id: 'live-doh', title: 'BGP Live и DoH', icon: IconPlugConnected }, + { id: 'network-as', title: 'Сеть и AS', icon: IconNetwork }, + ], + }, + { + title: 'Пинг', + items: [ + { id: 'ping', title: 'Пинг через MikroTik', icon: IconCloud }, + { id: 'ping-services', title: 'Пинг на главной', icon: IconChartPie }, + ], + }, + { + title: 'DNS', + items: [ + { id: 'ptr-zone', title: 'PTR зона', icon: IconWorld }, + ], + }, ]; +const SIDEBAR_SECTIONS = SIDEBAR_GROUPS.flatMap((g) => g.items); export default function SettingsPage() { const location = useLocation(); @@ -65,12 +81,16 @@ export default function SettingsPage() { ); }, [serversList]); - const sidebarItems = useMemo(() => { + const sidebarGroupsFiltered = useMemo(() => { const q = (sidebarSearch || '').trim().toLowerCase(); - if (!q) return SIDEBAR_SECTIONS; - return SIDEBAR_SECTIONS.filter( - (s) => s.title.toLowerCase().includes(q) || s.id.toLowerCase().includes(q) - ); + if (!q) return SIDEBAR_GROUPS; + return SIDEBAR_GROUPS.map((group) => ({ + ...group, + items: group.items.filter( + (s) => + s.title.toLowerCase().includes(q) || s.id.toLowerCase().includes(q) + ), + })).filter((g) => g.items.length > 0); }, [sidebarSearch]); useEffect(() => { @@ -302,46 +322,57 @@ export default function SettingsPage() { )}
- {/* Боковое меню в стиле Tabler / UniFi */} -
-
-
-
- - - - setSidebarSearch(e.target.value)} - aria-label="Поиск разделов" - /> -
- - {sidebarItems.length === 0 && ( -

Нет подходящих разделов

- )} + {/* Боковое меню в стиле Tabler Settings (секции + list-group) */} +
+
+
+ + + + setSidebarSearch(e.target.value)} + aria-label="Поиск разделов" + />
+ + {sidebarGroupsFiltered.length === 0 && ( +

Нет подходящих разделов

+ )}