feat(NetworkConfigManager, GatewayAutocompleteInput): add serverId handling for gateway filtering, enhancing configuration accuracy and user experience
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m2s

This commit is contained in:
2026-01-25 21:06:15 +07:00
parent d583757882
commit c7ebe0943b
2 changed files with 38 additions and 8 deletions
@@ -11,6 +11,7 @@ function GatewayAutocompleteInput({
gateways = [],
interfaces = [],
templateGateways = [], // Gateways из шаблона, которые еще не созданы
serverId = null, // ID сервера для фильтрации интерфейсов и gateways
excludeGatewayId = null, // ID gateway, который нужно исключить (текущий редактируемый)
placeholder = '',
className = 'form-control',
@@ -27,8 +28,15 @@ function GatewayAutocompleteInput({
const items = [];
// Добавляем прямые gateway из шаблона (которые еще не созданы)
// Фильтруем по serverId, если указан
templateGateways
.filter(g => g.id !== excludeGatewayId && g.type === 'direct' && g.ip)
.filter(g => {
if (g.id === excludeGatewayId) return false;
if (g.type !== 'direct' || !g.ip) return false;
// Если указан serverId, фильтруем по нему
if (serverId && g.serverId !== serverId) return false;
return true;
})
.forEach(g => {
items.push({
type: 'gateway',
@@ -43,8 +51,15 @@ function GatewayAutocompleteInput({
});
// Добавляем прямые gateway (уже созданные)
// Фильтруем по serverId, если указан
gateways
.filter(g => g.id !== excludeGatewayId && g.type === 'direct' && g.ip)
.filter(g => {
if (g.id === excludeGatewayId) return false;
if (g.type !== 'direct' || !g.ip) return false;
// Если указан serverId, фильтруем по нему
if (serverId && g.serverId !== serverId) return false;
return true;
})
.forEach(g => {
items.push({
type: 'gateway',
@@ -59,8 +74,17 @@ function GatewayAutocompleteInput({
});
// Добавляем интерфейсы
// Фильтруем по serverId, если указан (интерфейс должен принадлежать серверу)
interfaces
.filter(i => i.remoteIp)
.filter(i => {
if (!i.remoteIp) return false;
// Если указан serverId, фильтруем интерфейсы, которые принадлежат этому серверу
if (serverId) {
// Интерфейс принадлежит серверу, если serverId === i.serverId или serverId === i.serverId2
return i.serverId === serverId || i.serverId2 === serverId;
}
return true;
})
.forEach(i => {
items.push({
type: 'interface',
@@ -75,7 +99,7 @@ function GatewayAutocompleteInput({
});
return items;
}, [gateways, interfaces, templateGateways, excludeGatewayId]);
}, [gateways, interfaces, templateGateways, excludeGatewayId, serverId]);
const suggestions = useMemo(() => {
const q = String(value || '').toLowerCase();