diff --git a/frontend/src/components/server/ServerGroupCard.jsx b/frontend/src/components/server/ServerGroupCard.jsx index 875b2c5..98bfe4d 100644 --- a/frontend/src/components/server/ServerGroupCard.jsx +++ b/frontend/src/components/server/ServerGroupCard.jsx @@ -1,12 +1,13 @@ import { - IconServer, IconEdit, IconTrash, IconChevronDown, IconChevronUp, IconRouter, IconCircleCheck, - IconSquare + IconSquare, + IconNetwork, + IconCloud } from '@tabler/icons-react'; import { useState } from 'react'; @@ -23,8 +24,8 @@ function countryToFlag(isoCode) { } /** - * Одна карточка для группы серверов (например два home-роутера с одним groupKey — мультиван). - * Каждый сервер в группе сохраняет свой id; отображаются объединённо. + * Карточка группы серверов в том же формате, что и одиночная ServerCard: + * слева бейдж HOME, центр — флаг, название, провайдер и DNS с тегами, справа кнопки. */ export default function ServerGroupCard({ groupKey, @@ -34,93 +35,171 @@ export default function ServerGroupCard({ onEdit, onDelete }) { - const [expanded, setExpanded] = useState(true); - const title = groupKey || (servers[0]?.dns?.split('.')[0] || 'Группа'); + const [expanded, setExpanded] = useState(false); + const first = servers[0]; + const title = groupKey || (first?.dns?.split('.')[0] || 'Группа'); + const provider = first?.provider || ''; + const tunnel = first?.tunnel; + const wanCount = servers.length; + const anySelected = servers.some((s) => selectedSet.has(s.ip)); return (
- {/* Заголовок группы */} -
setExpanded(!expanded)} - > - - {title} - ({servers.length} WAN) - +
+
+ {anySelected ? ( + + ) : ( + + )} +
+
+ HOME +
+
+
+ + {/* Центр: флаг, название, провайдер; ниже DNS и теги */} +
setExpanded(!expanded)} + > +
+ {countryToFlag(first?.country)} +
+ {title} + {provider && ( + <> + + {provider} + + )} +
+ + {wanCount} WAN + +
+
+ + {first?.dns || first?.ip || ''} + + {tunnel && ( + + + {tunnel} + + )} + + + {wanCount} + +
+
+ + {/* Правая часть: кнопки как у необъединённой карточки */} +
+ + + +
+ {/* Развёрнутый список WAN */} {expanded && ( -
- {servers.map((server) => { - const isSelected = selectedSet.has(server.ip); - const serverName = server.dns?.split('.')[0] || server.ip; - return ( -
- - {countryToFlag(server.country)} -
- {serverName} - {server.dns || server.ip} -
-
- + {countryToFlag(server.country)} +
+ {serverName} + {server.dns || server.ip} +
+
+ + +
-
- ); - })} + ); + })} +
)}