feat(ServerManager): fetch and integrate network configuration gateways for improved server gateway handling
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m58s

This commit is contained in:
2026-02-17 12:53:54 +07:00
parent a0b5eb910f
commit 60f55e447f
+42 -2
View File
@@ -55,6 +55,7 @@ function ServerManager() {
// === Основные данные ===
const [servers, setServers] = useState([]);
const [connections, setConnections] = useState([]);
const [networkConfigGateways, setNetworkConfigGateways] = useState([]);
const [loading, setLoading] = useState(false);
// === UI State ===
@@ -126,9 +127,21 @@ function ServerManager() {
};
// === Загрузка данных ===
const fetchNetworkConfig = async () => {
try {
const res = await api.get('/network-config');
const config = res.data || {};
setNetworkConfigGateways(Array.isArray(config.gateways) ? config.gateways : []);
} catch (e) {
console.warn('Network config not loaded:', e?.message || e);
setNetworkConfigGateways([]);
}
};
useEffect(() => {
fetchServers();
fetchConnections();
fetchNetworkConfig();
}, []);
useEffect(() => {
@@ -174,6 +187,32 @@ function ServerManager() {
}
};
// Шлюзы для карточки: из /network-config по serverId, иначе из server.gateways
const getGatewaysForServer = useMemo(() => {
const gatewaysByServerId = {};
(networkConfigGateways || []).forEach((gw) => {
if (!gw.serverId) return;
if (!gatewaysByServerId[gw.serverId]) gatewaysByServerId[gw.serverId] = [];
gatewaysByServerId[gw.serverId].push(gw);
});
return (server) => {
const ids = [server?.id, server?.ip, server?.dns].filter(Boolean);
for (const id of ids) {
const gws = gatewaysByServerId[id];
if (gws?.length > 0) {
return gws.map((gw, idx) => ({
id: gw.id,
name: gw.description || gw.id || gw.ip,
ip: gw.ip,
comment: gw.description,
primary: idx === 0,
}));
}
}
return server?.gateways || [];
};
}, [networkConfigGateways]);
// === Фильтрация и сортировка ===
const filteredServers = useMemo(() => {
let result = [...servers];
@@ -601,6 +640,7 @@ function ServerManager() {
const handleRefreshAll = () => {
fetchServers();
fetchConnections();
fetchNetworkConfig();
};
// === Connections ===
@@ -846,7 +886,7 @@ function ServerManager() {
<ServerGroupCard
key={`group-${item.groupKey}`}
groupKey={item.groupKey}
servers={item.servers}
servers={item.servers.map((s) => ({ ...s, gateways: getGatewaysForServer(s) }))}
selectedSet={selectedServers}
onSelect={toggleServerSelection}
onSelectGroup={toggleGroupSelection}
@@ -856,7 +896,7 @@ function ServerManager() {
) : (
<ServerCard
key={item.server.id || item.server.ip}
server={item.server}
server={{ ...item.server, gateways: getGatewaysForServer(item.server) }}
selected={selectedServers.has(item.server.ip)}
onSelect={toggleServerSelection}
onEdit={handleEdit}