From 7bc31dd1941d0aacedaa9530cf83f2ee70cbf488 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Tue, 2 Jun 2026 01:52:38 +0200 Subject: [PATCH] feat(outbounds): pick dialerProxy from other outbound tags for proxy chaining Turn the outbound sockopt dialerProxy free-text input into a searchable Select populated with the other outbound tags, so users can build a proxy chain (route one outbound through another) without typing tags by hand. The list excludes the current outbound, so self-reference cycles cannot be selected. A tooltip and placeholder explain the chaining concept. Adds dialerProxyPlaceholder and dialerProxyHint to all 13 locales. Closes #4446 --- .../xray/outbounds/OutboundFormModal.tsx | 4 +++- .../xray/outbounds/transport/sockopt.tsx | 24 +++++++++++++++++-- web/translation/ar-EG.json | 2 ++ web/translation/en-US.json | 2 ++ web/translation/es-ES.json | 2 ++ web/translation/fa-IR.json | 2 ++ web/translation/id-ID.json | 2 ++ web/translation/ja-JP.json | 2 ++ web/translation/pt-BR.json | 2 ++ web/translation/ru-RU.json | 2 ++ web/translation/tr-TR.json | 2 ++ web/translation/uk-UA.json | 2 ++ web/translation/vi-VN.json | 2 ++ web/translation/zh-CN.json | 2 ++ web/translation/zh-TW.json | 2 ++ 15 files changed, 51 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/xray/outbounds/OutboundFormModal.tsx b/frontend/src/pages/xray/outbounds/OutboundFormModal.tsx index 887f7ce4..314585c4 100644 --- a/frontend/src/pages/xray/outbounds/OutboundFormModal.tsx +++ b/frontend/src/pages/xray/outbounds/OutboundFormModal.tsx @@ -575,7 +575,9 @@ export default function OutboundFormModal({ {security === 'reality' && realityAllowed && } - {((streamAllowed && network) || !streamAllowed) && } + {((streamAllowed && network) || !streamAllowed) && ( + + )} }) { +export default function SockoptForm({ + form, + outboundTags = [], +}: { + form: FormInstance; + outboundTags?: string[]; +}) { const { t } = useTranslation(); return ( @@ -16,6 +22,14 @@ export default function SockoptForm({ form }: { form: FormInstance ({ value: tg, label: tg })); return ( <> @@ -34,8 +48,14 @@ export default function SockoptForm({ form }: { form: FormInstance - +