feat(FilterManager): integrate network configuration gateways for enhanced filtering; implement async loading of gateways from /network-config endpoint
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m37s

This commit is contained in:
2026-01-22 10:45:03 +07:00
parent c925a22a99
commit e5f576d11e
+50 -5
View File
@@ -753,6 +753,8 @@ function FilterManager() {
const [baseAS, setBaseAS] = useState('65001');
// Inventory servers (from /servers endpoint)
const [inventoryServers, setInventoryServers] = useState([]);
// Network config gateways (from /network-config endpoint)
const [networkConfigGateways, setNetworkConfigGateways] = useState([]);
// Собираем gateways только для выбранного сервера
const selectedServerGateways = (() => {
@@ -765,12 +767,41 @@ function FilterManager() {
String(srv.ip || '').trim() === selectedServer.name
);
const gws = [];
const serverDns = matchedServer?.dns || matchedServer?.hostName || selectedServer.name || '';
const serverId = matchedServer?.id || matchedServer?.ip || selectedServer.id || selectedServer.name || '';
const country = matchedServer?.country || '';
const provider = matchedServer?.provider || '';
// Добавляем только реальные gateways из inventoryServers
if (matchedServer && Array.isArray(matchedServer.gateways)) {
const gws = [];
// ПРИОРИТЕТ 1: Gateways из NetworkConfigManager (новая страница)
// Ищем gateways по serverId (может быть id, ip или dns)
const networkGateways = networkConfigGateways.filter(gw => {
if (!gw.serverId) return false;
// Сравниваем по разным вариантам идентификатора
return (
gw.serverId === serverId ||
gw.serverId === matchedServer?.ip ||
gw.serverId === matchedServer?.dns ||
gw.serverId === selectedServer.name ||
gw.serverId === serverDns
);
});
networkGateways.forEach(gw => {
gws.push({
name: gw.name,
ip: gw.ip || '',
comment: gw.description || '',
serverDns: serverDns,
country: country,
provider: provider,
primary: false // В network-config нет поля primary, но можно добавить если нужно
});
});
// ПРИОРИТЕТ 2: Fallback на старые gateways из inventoryServers (если нет в network-config)
if (gws.length === 0 && matchedServer && Array.isArray(matchedServer.gateways)) {
matchedServer.gateways.forEach(gw => {
// Пропускаем шлюзы, у которых имя совпадает с названием сервера (это fallback)
if (gw.name && gw.name !== serverDns && gw.name !== selectedServer.name) {
@@ -780,14 +811,15 @@ function FilterManager() {
comment: gw.comment || '',
serverDns: serverDns,
country: country,
provider: provider,
primary: gw.primary
});
}
});
}
// Также проверяем gateways из selectedServer (server-configs)
if (Array.isArray(selectedServer.gateways)) {
// ПРИОРИТЕТ 3: Fallback на gateways из selectedServer (server-configs)
if (gws.length === 0 && Array.isArray(selectedServer.gateways)) {
selectedServer.gateways.forEach(gw => {
// Пропускаем fallback шлюзы с названием сервера
if (gw.name && gw.name !== serverDns && gw.name !== selectedServer.name && !gws.some(g => g.name === gw.name)) {
@@ -797,6 +829,7 @@ function FilterManager() {
comment: gw.comment || '',
serverDns: serverDns,
country: country,
provider: provider,
primary: gw.primary
});
}
@@ -841,6 +874,18 @@ function FilterManager() {
// мягко игнорируем, дополнительная информация необязательна
}
})();
// Загружаем gateways из NetworkConfigManager
(async () => {
try {
const res = await api.get(`/network-config`);
const networkConfig = res.data || {};
setNetworkConfigGateways(Array.isArray(networkConfig.gateways) ? networkConfig.gateways : []);
} catch (e) {
// Если файла нет или ошибка - используем пустой массив (fallback на старую логику)
setNetworkConfigGateways([]);
}
})();
}, []);
const filterKey = (f) => {