From 7cd33384b7b03a0d8a2e07981b74f88574f06f9b Mon Sep 17 00:00:00 2001 From: shats Date: Tue, 17 Feb 2026 12:10:49 +0700 Subject: [PATCH] feat(ServerManager): add group selection functionality for servers in ServerManager and ServerGroupCard components --- frontend/src/ServerManager.jsx | 12 ++++++++++++ .../src/components/server/ServerGroupCard.jsx | 15 ++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/frontend/src/ServerManager.jsx b/frontend/src/ServerManager.jsx index 29ab78b..c06c69b 100644 --- a/frontend/src/ServerManager.jsx +++ b/frontend/src/ServerManager.jsx @@ -284,6 +284,17 @@ function ServerManager() { setSelectedServers(newSet); }; + const toggleGroupSelection = (servers, selectAll) => { + setSelectedServers((prev) => { + const next = new Set(prev); + servers.forEach((s) => { + if (selectAll) next.add(s.ip); + else next.delete(s.ip); + }); + return next; + }); + }; + const selectAllServers = () => { if (selectedServers.size === filteredServers.length) { setSelectedServers(new Set()); @@ -838,6 +849,7 @@ function ServerManager() { servers={item.servers} selectedSet={selectedServers} onSelect={toggleServerSelection} + onSelectGroup={toggleGroupSelection} onEdit={handleEdit} onDelete={confirmDelete} /> diff --git a/frontend/src/components/server/ServerGroupCard.jsx b/frontend/src/components/server/ServerGroupCard.jsx index 59cf06c..deaab2a 100644 --- a/frontend/src/components/server/ServerGroupCard.jsx +++ b/frontend/src/components/server/ServerGroupCard.jsx @@ -31,6 +31,7 @@ export default function ServerGroupCard({ servers, selectedSet, onSelect, + onSelectGroup, onEdit, onDelete }) { @@ -43,11 +44,15 @@ export default function ServerGroupCard({ const allSelected = servers.length > 0 && servers.every((s) => selectedSet.has(s.ip)); const handleGroupSelect = () => { - servers.forEach((s) => { - const selected = selectedSet.has(s.ip); - if (allSelected && selected) onSelect?.(s); - if (!allSelected && !selected) onSelect?.(s); - }); + if (onSelectGroup) { + onSelectGroup(servers, !allSelected); + } else { + servers.forEach((s) => { + const selected = selectedSet.has(s.ip); + if (allSelected && selected) onSelect?.(s); + if (!allSelected && !selected) onSelect?.(s); + }); + } }; return (