From e09976b64e1a7a2e420335bde1d70abe1b89559a Mon Sep 17 00:00:00 2001 From: shats Date: Tue, 17 Feb 2026 11:17:04 +0700 Subject: [PATCH] feat(ServerGroupCard): implement group selection functionality and improve selection indicator logic --- .../src/components/server/ServerGroupCard.jsx | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/frontend/src/components/server/ServerGroupCard.jsx b/frontend/src/components/server/ServerGroupCard.jsx index 231b46c..59cf06c 100644 --- a/frontend/src/components/server/ServerGroupCard.jsx +++ b/frontend/src/components/server/ServerGroupCard.jsx @@ -5,7 +5,6 @@ import { IconChevronUp, IconRouter, IconCircleCheck, - IconSquare, IconNetwork, IconCloud } from '@tabler/icons-react'; @@ -41,6 +40,15 @@ export default function ServerGroupCard({ const tunnel = first?.tunnel; const wanCount = servers.length; const anySelected = servers.some((s) => selectedSet.has(s.ip)); + 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); + }); + }; return (
onSelect?.(first)} + onClick={handleGroupSelect} >
- {anySelected ? ( + {allSelected ? ( ) : ( @@ -171,27 +179,27 @@ export default function ServerGroupCard({ className={`d-flex align-items-stretch rounded mb-1 overflow-hidden ${isSelected ? 'bg-primary-lt' : 'bg-white'}`} style={{ boxShadow: '0 0 0 1px rgba(0,0,0,0.06)' }} > - {/* Бейдж HOME у вложенного роутера */} + {/* Бейдж HOME — клик как у обычной карточки, без явной галочки */}
onSelect?.(server)} + title={isSelected ? 'Снять выбор' : 'Выбрать'} > - + {isSelected ? ( + + ) : ( + + )} HOME
- {countryToFlag(server.country)}
{serverName}