mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-08-24 20:07:13 +00:00
feat(clients,routing): label inbounds by remark with tag fallback
Inbound pickers and chips across the Users area, the inbounds attach-clients modals, and the routing rule inbound-tags selector showed the auto-generated tag (in-443-tcp). Show the inbound remark when set, falling back to the tag. Only display labels change; option values keep using the inbound id (or tag for routing rules, which match inbounds by tag), so filtering, attaching, and saved rules are unaffected. Routing reads remarks via a shared useInboundOptions hook that reuses the existing options query cache.
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useEffect, useMemo, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Button, Form, Input, Modal, Select, Space, Tooltip } from 'antd';
|
||||
import { PlusOutlined, MinusOutlined, QuestionCircleOutlined } from '@ant-design/icons';
|
||||
import { InputAddon } from '@/components/ui';
|
||||
import { useInboundOptions } from '@/api/queries/useInboundOptions';
|
||||
import { RuleFormSchema, type RuleFormValues } from '@/schemas/xray';
|
||||
|
||||
export interface RoutingRule {
|
||||
@@ -72,6 +73,15 @@ export default function RuleFormModal({
|
||||
const [form, setForm] = useState<FormState>(initialForm);
|
||||
const isEdit = rule != null;
|
||||
|
||||
const { data: inboundOptions } = useInboundOptions();
|
||||
const remarkByTag = useMemo(() => {
|
||||
const map: Record<string, string> = {};
|
||||
for (const ib of inboundOptions || []) {
|
||||
if (ib.tag) map[ib.tag] = ib.remark?.trim() || ib.tag;
|
||||
}
|
||||
return map;
|
||||
}, [inboundOptions]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!open) return;
|
||||
if (rule) {
|
||||
@@ -269,7 +279,7 @@ export default function RuleFormModal({
|
||||
mode="multiple"
|
||||
value={form.inboundTag}
|
||||
onChange={(v) => update('inboundTag', v)}
|
||||
options={inboundTags.map((tag) => ({ value: tag, label: tag }))}
|
||||
options={inboundTags.map((tag) => ({ value: tag, label: remarkByTag[tag] || tag }))}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user