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 [servers, setServers] = useState([]);
|
||||||
const [connections, setConnections] = useState([]);
|
const [connections, setConnections] = useState([]);
|
||||||
|
const [networkConfigGateways, setNetworkConfigGateways] = useState([]);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
// === UI State ===
|
// === 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(() => {
|
useEffect(() => {
|
||||||
fetchServers();
|
fetchServers();
|
||||||
fetchConnections();
|
fetchConnections();
|
||||||
|
fetchNetworkConfig();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
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(() => {
|
const filteredServers = useMemo(() => {
|
||||||
let result = [...servers];
|
let result = [...servers];
|
||||||
@@ -601,6 +640,7 @@ function ServerManager() {
|
|||||||
const handleRefreshAll = () => {
|
const handleRefreshAll = () => {
|
||||||
fetchServers();
|
fetchServers();
|
||||||
fetchConnections();
|
fetchConnections();
|
||||||
|
fetchNetworkConfig();
|
||||||
};
|
};
|
||||||
|
|
||||||
// === Connections ===
|
// === Connections ===
|
||||||
@@ -846,7 +886,7 @@ function ServerManager() {
|
|||||||
<ServerGroupCard
|
<ServerGroupCard
|
||||||
key={`group-${item.groupKey}`}
|
key={`group-${item.groupKey}`}
|
||||||
groupKey={item.groupKey}
|
groupKey={item.groupKey}
|
||||||
servers={item.servers}
|
servers={item.servers.map((s) => ({ ...s, gateways: getGatewaysForServer(s) }))}
|
||||||
selectedSet={selectedServers}
|
selectedSet={selectedServers}
|
||||||
onSelect={toggleServerSelection}
|
onSelect={toggleServerSelection}
|
||||||
onSelectGroup={toggleGroupSelection}
|
onSelectGroup={toggleGroupSelection}
|
||||||
@@ -856,7 +896,7 @@ function ServerManager() {
|
|||||||
) : (
|
) : (
|
||||||
<ServerCard
|
<ServerCard
|
||||||
key={item.server.id || item.server.ip}
|
key={item.server.id || item.server.ip}
|
||||||
server={item.server}
|
server={{ ...item.server, gateways: getGatewaysForServer(item.server) }}
|
||||||
selected={selectedServers.has(item.server.ip)}
|
selected={selectedServers.has(item.server.ip)}
|
||||||
onSelect={toggleServerSelection}
|
onSelect={toggleServerSelection}
|
||||||
onEdit={handleEdit}
|
onEdit={handleEdit}
|
||||||
|
|||||||
Reference in New Issue
Block a user