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
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m58s
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user