From fba4dc54093522836606ad7d87168b40b67e4f9b Mon Sep 17 00:00:00 2001
From: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date: Tue, 10 Nov 2026 00:05:15 +0800
Subject: [PATCH] feat(connections): add network protocol filter
Filter connections by metadata.network (All/TCP/UDP) in both table and
list layouts, combined with search, and kept across page switches like
the existing search state.
Refs #6140
---
Changelog.md | 1 +
src/locales/ar/connections.json | 3 ++
src/locales/de/connections.json | 3 ++
src/locales/en/connections.json | 3 ++
src/locales/es/connections.json | 3 ++
src/locales/fa/connections.json | 3 ++
src/locales/id/connections.json | 3 ++
src/locales/jp/connections.json | 3 ++
src/locales/ko/connections.json | 3 ++
src/locales/pt/connections.json | 3 ++
src/locales/ru/connections.json | 3 ++
src/locales/tr/connections.json | 3 ++
src/locales/tt/connections.json | 3 ++
src/locales/zh/connections.json | 3 ++
src/locales/zhtw/connections.json | 3 ++
src/pages/connections.tsx | 48 ++++++++++++++++++++++++---
src/types/generated/i18n-keys.ts | 1 +
src/types/generated/i18n-resources.ts | 3 ++
18 files changed, 90 insertions(+), 5 deletions(-)
diff --git a/Changelog.md b/Changelog.md
index 307e88622..039d4ba96 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -39,6 +39,7 @@
✨ 新增功能
+- 新增连接页面按网络协议(TCP/UDP)筛选连接
diff --git a/src/locales/ar/connections.json b/src/locales/ar/connections.json
index c5bcd0057..b0136bf1b 100644
--- a/src/locales/ar/connections.json
+++ b/src/locales/ar/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "سرعة الرفع",
"downloadSpeed": "سرعة التنزيل"
},
+ "filter": {
+ "allNetworks": "كل الشبكات"
+ },
"actions": {
"active": "Active",
"closed": "Closed",
diff --git a/src/locales/de/connections.json b/src/locales/de/connections.json
index 5f5b62dff..1d58918c6 100644
--- a/src/locales/de/connections.json
+++ b/src/locales/de/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "Upload-Geschwindigkeit",
"downloadSpeed": "Download-Geschwindigkeit"
},
+ "filter": {
+ "allNetworks": "Alle Netzwerke"
+ },
"actions": {
"active": "Aktiv",
"closed": "Geschlossen",
diff --git a/src/locales/en/connections.json b/src/locales/en/connections.json
index 82b3cebac..8bfa98c11 100644
--- a/src/locales/en/connections.json
+++ b/src/locales/en/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "Upload Speed",
"downloadSpeed": "Download Speed"
},
+ "filter": {
+ "allNetworks": "All Networks"
+ },
"actions": {
"active": "Active",
"closed": "Closed",
diff --git a/src/locales/es/connections.json b/src/locales/es/connections.json
index 1b49bc17c..1e4050b2c 100644
--- a/src/locales/es/connections.json
+++ b/src/locales/es/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "Velocidad de subida",
"downloadSpeed": "Velocidad de descarga"
},
+ "filter": {
+ "allNetworks": "Todas las redes"
+ },
"actions": {
"active": "Active",
"closed": "Closed",
diff --git a/src/locales/fa/connections.json b/src/locales/fa/connections.json
index a8c8687e7..436d30234 100644
--- a/src/locales/fa/connections.json
+++ b/src/locales/fa/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "سرعت بارگذاری",
"downloadSpeed": "سرعت دانلود"
},
+ "filter": {
+ "allNetworks": "همه شبکهها"
+ },
"actions": {
"active": "Active",
"closed": "Closed",
diff --git a/src/locales/id/connections.json b/src/locales/id/connections.json
index 29748ccf9..0e679cd10 100644
--- a/src/locales/id/connections.json
+++ b/src/locales/id/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "Kecepatan Unggah",
"downloadSpeed": "Kecepatan Unduh"
},
+ "filter": {
+ "allNetworks": "Semua Jaringan"
+ },
"actions": {
"active": "Active",
"closed": "Closed",
diff --git a/src/locales/jp/connections.json b/src/locales/jp/connections.json
index 25fb84e8a..bf4782ff2 100644
--- a/src/locales/jp/connections.json
+++ b/src/locales/jp/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "アップロード速度",
"downloadSpeed": "ダウンロード速度"
},
+ "filter": {
+ "allNetworks": "すべてのネットワーク"
+ },
"actions": {
"active": "Active",
"closed": "Closed",
diff --git a/src/locales/ko/connections.json b/src/locales/ko/connections.json
index 88173f6ac..1de994098 100644
--- a/src/locales/ko/connections.json
+++ b/src/locales/ko/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "업로드 속도",
"downloadSpeed": "다운로드 속도"
},
+ "filter": {
+ "allNetworks": "모든 네트워크"
+ },
"actions": {
"active": "Active",
"closed": "Closed",
diff --git a/src/locales/pt/connections.json b/src/locales/pt/connections.json
index 8034e7599..96873906f 100644
--- a/src/locales/pt/connections.json
+++ b/src/locales/pt/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "Velocidade de upload",
"downloadSpeed": "Velocidade de download"
},
+ "filter": {
+ "allNetworks": "Todas as redes"
+ },
"actions": {
"active": "Ativas",
"closed": "Fechadas",
diff --git a/src/locales/ru/connections.json b/src/locales/ru/connections.json
index 37b8adaef..f8686a45c 100644
--- a/src/locales/ru/connections.json
+++ b/src/locales/ru/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "Скорость загрузки",
"downloadSpeed": "Скорость скачивания"
},
+ "filter": {
+ "allNetworks": "Все сети"
+ },
"actions": {
"active": "Активные",
"closed": "Закрытые",
diff --git a/src/locales/tr/connections.json b/src/locales/tr/connections.json
index b8f85292a..8a1778990 100644
--- a/src/locales/tr/connections.json
+++ b/src/locales/tr/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "Yükleme Hızı",
"downloadSpeed": "İndirme Hızı"
},
+ "filter": {
+ "allNetworks": "Tüm Ağlar"
+ },
"actions": {
"active": "Etkin",
"closed": "Kapatılan",
diff --git a/src/locales/tt/connections.json b/src/locales/tt/connections.json
index 48a28d4b8..474f092a8 100644
--- a/src/locales/tt/connections.json
+++ b/src/locales/tt/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "Йөкләү (чыгару) тизлеге",
"downloadSpeed": "Йөкләү тизлеге"
},
+ "filter": {
+ "allNetworks": "Барлык челтәрләр"
+ },
"actions": {
"active": "Active",
"closed": "Closed",
diff --git a/src/locales/zh/connections.json b/src/locales/zh/connections.json
index 33a447813..3385be8b9 100644
--- a/src/locales/zh/connections.json
+++ b/src/locales/zh/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "上传速度",
"downloadSpeed": "下载速度"
},
+ "filter": {
+ "allNetworks": "全部网络"
+ },
"actions": {
"active": "活跃",
"closed": "已关闭",
diff --git a/src/locales/zhtw/connections.json b/src/locales/zhtw/connections.json
index 520f3a855..6982edecb 100644
--- a/src/locales/zhtw/connections.json
+++ b/src/locales/zhtw/connections.json
@@ -21,6 +21,9 @@
"uploadSpeed": "上傳速度",
"downloadSpeed": "下載速度"
},
+ "filter": {
+ "allNetworks": "全部網路"
+ },
"actions": {
"active": "活躍",
"closed": "已關閉",
diff --git a/src/pages/connections.tsx b/src/pages/connections.tsx
index fbfe9d378..3ca0b4157 100644
--- a/src/pages/connections.tsx
+++ b/src/pages/connections.tsx
@@ -71,6 +71,10 @@ const ORDER_OPTIONS = [
type OrderKey = (typeof ORDER_OPTIONS)[number]['id']
+type NetworkFilter = 'all' | 'tcp' | 'udp'
+
+let savedNetworkFilter: NetworkFilter = 'all'
+
const orderFunctionMap = ORDER_OPTIONS.reduce>(
(acc, option) => {
acc[option.id] = option.fn
@@ -86,6 +90,9 @@ const ConnectionsPage = () => {
const { searchState, match, onSearch } = usePageSearch('connections')
const hasSearch = searchState.text.length > 0
const [curOrderOpt, setCurOrderOpt] = useState('default')
+ const [networkFilter, setNetworkFilter] =
+ useState(savedNetworkFilter)
+ const hasFilter = networkFilter !== 'all'
const [connectionsType, setConnectionsType] = useState<'active' | 'closed'>(
'active',
)
@@ -112,18 +119,30 @@ const ConnectionsPage = () => {
const filterConn = useMemo(() => {
const orderFunc = orderFunctionMap[curOrderOpt]
- if (isTableLayout && !hasSearch) return selectedConnections
- if (!hasSearch) return orderFunc([...selectedConnections])
+ if (isTableLayout && !hasSearch && !hasFilter) return selectedConnections
+ if (!hasSearch && !hasFilter) return orderFunc([...selectedConnections])
const matchConns = selectedConnections.filter((conn) => {
- const { host, destinationIP, process } = conn.metadata
+ const { host, destinationIP, process, network } = conn.metadata
+ if (networkFilter !== 'all' && network !== networkFilter) return false
return (
- match(host || '') || match(destinationIP || '') || match(process || '')
+ !hasSearch ||
+ match(host || '') ||
+ match(destinationIP || '') ||
+ match(process || '')
)
})
return orderFunc ? orderFunc(matchConns) : matchConns
- }, [selectedConnections, isTableLayout, hasSearch, match, curOrderOpt])
+ }, [
+ selectedConnections,
+ isTableLayout,
+ hasSearch,
+ hasFilter,
+ networkFilter,
+ match,
+ curOrderOpt,
+ ])
const displayRows = useConnectionRowViews(
isTableLayout ? EMPTY_CONNECTIONS : filterConn,
@@ -255,6 +274,25 @@ const ConnectionsPage = () => {
))}
)}
+ {
+ savedNetworkFilter = e.target.value as NetworkFilter
+ setNetworkFilter(savedNetworkFilter)
+ }}
+ >
+
+
+
+