From a4e0b5c93688aacc802ae90fd264383d69515ede Mon Sep 17 00:00:00 2001 From: Denis Shatskiy Date: Mon, 14 Jul 2025 12:18:19 +0700 Subject: [PATCH] feat: Add search functionality and server statistics panel in FilterManager for improved user experience and server management insights --- frontend/src/FilterManager.jsx | 300 +++++++++++++++++++++++++++------ 1 file changed, 245 insertions(+), 55 deletions(-) diff --git a/frontend/src/FilterManager.jsx b/frontend/src/FilterManager.jsx index 49a72aa..6b3ad51 100644 --- a/frontend/src/FilterManager.jsx +++ b/frontend/src/FilterManager.jsx @@ -19,7 +19,9 @@ import { IconEye, IconServer, IconSettings, - IconDeviceFloppy + IconDeviceFloppy, + IconHash, + IconRocket } from '@tabler/icons-react'; const API_URL = '/api'; @@ -490,7 +492,19 @@ function FilterManager() { } }; - // Удаляем старые переменные фильтрации + // Состояние для поиска + const [searchTerm, setSearchTerm] = useState(''); + + // Фильтрация серверов по поиску + const filteredServers = servers.filter(server => + server.name.toLowerCase().includes(searchTerm.toLowerCase()) || + (server.description && server.description.toLowerCase().includes(searchTerm.toLowerCase())) + ); + + // Статистика + const totalServers = servers.length; + const enabledServers = servers.filter(s => s.enabled).length; + const serversWithFilters = servers.filter(s => s.id === selectedServer?.id ? serverFilters.length > 0 : false).length; return (
@@ -507,6 +521,8 @@ function FilterManager() {
)} + {/* Панель статистики */} +
+
+
+
+
+
+ + + +
+
+
{totalServers}
+
Всего серверов
+
+
+
+
+
+
+
+
+
+
+ + + +
+
+
{enabledServers}
+
Активных серверов
+
+
+
+
+
+
+
+
+
+
+ + + +
+
+
{selectedServer ? serverFilters.length : '-'}
+
+ {selectedServer ? 'Фильтров в выбранном сервере' : 'Выберите сервер'} +
+
+
+
+
+
+
+
+
+
+
+ + + +
+
+
+ {!selectedServer ? 'Не выбран' : serverFilters.length > 0 ? 'Готов' : 'Не готов'} +
+
Статус конфигурации
+
+
+
+
+
+
+ {/* Секция управления серверами */}
@@ -560,6 +654,18 @@ function FilterManager() { Готовые конфигурации серверов
+
+ + + + setSearchTerm(e.target.value)} + /> +
+ ) : filteredServers.length === 0 ? ( +
+ +

Серверы не найдены по запросу "{searchTerm}"

+ +
) : (
- {servers.map(server => ( + {filteredServers.map(server => (
-
+
-
-

{server.name}

+
+
+

+ {server.name} + {selectedServer?.id === server.id && ( + Выбран + )} +

+
+ + {server.enabled ? 'Активен' : 'Неактивен'} + + {server.id === selectedServer?.id && ( + + {serverFilters.length} фильтров + + )} +
+
+ {server.description && (

{server.description}

)} -
+ +
- - - +
+
+

+ + Фильтры сервера: {selectedServer.name} + + {serverFilters.length} фильтров + +

+
+ Управление фильтрами community/gateway для генерации конфигурации MikroTik +
+
+
+
+ + + + + {serverFilters.length > 0 && ( + + )} +
+
- {serverFilters.length === 0 ? ( + {loading ? ( +
+
+ Загрузка... +
+ Загрузка фильтров... +
+ ) : serverFilters.length === 0 ? (

Нет фильтров для этого сервера

+

+ Добавьте фильтры community/gateway для генерации конфигурации MikroTik +