fix(inbound): preserve custom share strategy on edit (#5225)

This commit is contained in:
iYuan
2026-06-13 00:38:01 +08:00
committed by GitHub
parent 6e20588236
commit 90e6217749
2 changed files with 39 additions and 1 deletions
@@ -381,7 +381,8 @@ export default function InboundFormModal({
// protocol reset drops a nodeId that no longer applies.
useEffect(() => {
if (!open) return;
if (!nodeShareOptionAvailable && shareAddrStrategy === 'node') {
const current = form.getFieldValue('shareAddrStrategy') as InboundFormValues['shareAddrStrategy'] | undefined;
if (!nodeShareOptionAvailable && (current ?? 'node') === 'node') {
form.setFieldValue('shareAddrStrategy', 'listen');
}
// eslint-disable-next-line react-hooks/exhaustive-deps
@@ -1,6 +1,8 @@
import { describe, it, expect } from 'vitest';
import { screen } from '@testing-library/react';
import InboundFormModal from '@/pages/inbounds/form/InboundFormModal';
import { DBInbound } from '@/models/dbinbound';
import {
renderWithProviders,
fieldLabels,
@@ -38,4 +40,39 @@ describe('InboundFormModal', () => {
expect(fieldLabels()).toMatchSnapshot(proto);
}
});
it('preserves custom share address strategy when editing a local inbound', async () => {
renderWithProviders(
<InboundFormModal
open
mode="edit"
dbInbound={new DBInbound({
id: 1,
port: 12345,
listen: '',
protocol: 'shadowsocks',
remark: 'edge',
enable: true,
settings: {
method: '2022-blake3-aes-128-gcm',
password: 'server-password',
network: 'tcp,udp',
clients: [],
},
streamSettings: { network: 'tcp', security: 'none', tcpSettings: {} },
sniffing: { enabled: false },
nodeId: null,
shareAddrStrategy: 'custom',
shareAddr: 'edge.example.test',
})}
dbInbounds={[]}
availableNodes={[]}
onClose={() => {}}
onSaved={() => {}}
/>,
);
const shareAddrInput = await screen.findByDisplayValue('edge.example.test');
expect((shareAddrInput as HTMLInputElement).value).toBe('edge.example.test');
});
});