diff --git a/frontend/src/ServerManager.jsx b/frontend/src/ServerManager.jsx index ea04b21..604bf1e 100644 --- a/frontend/src/ServerManager.jsx +++ b/frontend/src/ServerManager.jsx @@ -57,7 +57,6 @@ function ServerManager() { // === UI State === const [activeTab, setActiveTab] = useState('servers'); // 'servers' | 'connections' const [viewMode, setViewMode] = useState('cards'); // 'table' | 'cards' - const [sidebarCollapsed, setSidebarCollapsed] = useState(false); // === Фильтры и поиск === const [filters, setFilters] = useState({ @@ -630,38 +629,86 @@ function ServerManager() { - {/* Main content with sidebar */} + {/* Offcanvas: фильтры (только для вкладки «Серверы») */} {activeTab === 'servers' && ( -
- {/* Sidebar */} - {!sidebarCollapsed && ( - { setFilters(newFilters); setCurrentPage(1); }} - searchTerm={searchTerm} - onSearch={(term) => { setSearchTerm(term); setCurrentPage(1); }} - onReset={handleResetFilters} - /> - )} - - {/* Toggle sidebar button */} - +
+
+ + Фильтры + {(Object.values(filters).filter(Boolean).length + (searchTerm ? 1 : 0)) > 0 && ( + + {Object.values(filters).filter(Boolean).length + (searchTerm ? 1 : 0)} + + )} +
+
+ {(Object.values(filters).filter(Boolean).length + (searchTerm ? 1 : 0)) > 0 && ( + + )} +
+
+
+ { setFilters(newFilters); setCurrentPage(1); }} + searchTerm={searchTerm} + onSearch={(term) => { setSearchTerm(term); setCurrentPage(1); }} + onReset={handleResetFilters} + embedded + /> +
+
+ + )} - {/* Servers list */} + {/* Main content */} + {activeTab === 'servers' && ( +
{/* Toolbar */}
+ {/* Открыть фильтры (offcanvas) */} + {/* Select all */} )}
- {activeFiltersCount > 0 && ( - - )} -
+ )} -
+
@@ -145,7 +149,7 @@ export default function ServerSidebar({
-
+
-
+
Статистика @@ -261,6 +265,15 @@ export default function ServerSidebar({ {stats.byType['jumphost'] || 0}
+ + ); + + if (embedded) { + return
{content}
; + } + return ( +
+ {content}
); }