fix(web): hide duplicate connection mode control

This commit is contained in:
fdc310
2026-10-01 05:13:21 +08:00
parent df64f83e12
commit abd1a1a9ba
3 changed files with 38 additions and 0 deletions
@@ -552,6 +552,14 @@ const BotForm = forwardRef<BotFormHandle, BotFormProps>(function BotForm(
[adapterNameToDynamicConfigMap, currentAdapter],
);
const connectionModeControllerNames = useMemo(() => {
if (supportedConnectionModes.length <= 1) return [];
const webhookField = dynamicFormConfigList.find(
(item) => item.type === DynamicFormItemType.WEBHOOK_URL,
);
return webhookField?.show_if?.field ? [webhookField.show_if.field] : [];
}, [dynamicFormConfigList, supportedConnectionModes.length]);
const botGuideSteps = useMemo<GuidedTourStep[]>(() => {
const steps: GuidedTourStep[] = [];
@@ -1140,6 +1148,7 @@ const BotForm = forwardRef<BotFormHandle, BotFormProps>(function BotForm(
<div data-guide="bot-adapter-parameters">
<DynamicFormComponent
itemConfigList={dynamicFormConfigList}
hiddenItemNames={connectionModeControllerNames}
initialValues={currentAdapterConfig}
onSubmit={(values) => {
form.setValue('adapter_config', values, {
@@ -441,6 +441,7 @@ export default function DynamicFormComponent({
systemContext,
onValidate,
renderItem,
hiddenItemNames,
}: {
itemConfigList: IDynamicFormItemSchema[];
onSubmit?: (val: object) => unknown;
@@ -463,6 +464,8 @@ export default function DynamicFormComponent({
formValues: Record<string, unknown>;
setFormValue: (name: string, value: unknown) => void;
}) => ReactNode | undefined;
/** Fields retained in form state but omitted from the rendered form. */
hiddenItemNames?: readonly string[];
}) {
const isInitialMount = useRef(true);
const previousInitialValues = useRef(initialValues);
@@ -647,6 +650,8 @@ export default function DynamicFormComponent({
/>
{itemConfigList.map((config, index) => {
if (hiddenItemNames?.includes(config.name)) return null;
// Create a normalized config with type converted to frontend format
const normalizedConfig = {
...config,
@@ -17,6 +17,9 @@ const homeSidebarSource = readSource(
const botFormSource = readSource(
'src/app/home/bots/components/bot-form/BotForm.tsx',
);
const dynamicFormSource = readSource(
'src/app/home/components/dynamic-form/DynamicFormComponent.tsx',
);
const kbFormSource = readSource(
'src/app/home/knowledge/components/kb-form/KBForm.tsx',
);
@@ -52,6 +55,27 @@ test('keeps bot forms spaced with responsive setup and detail columns', () => {
assert.match(kbFormSource, /<form[\s\S]*?className="space-y-6"/);
});
test('hides the manifest connection switch behind the dedicated selector', () => {
assert.match(
botFormSource,
/webhookField\?\.show_if\?\.field\s*\?\s*\[webhookField\.show_if\.field\]/,
);
assert.match(
botFormSource,
/hiddenItemNames=\{connectionModeControllerNames\}/,
);
assert.match(
dynamicFormSource,
/if \(hiddenItemNames\?\.includes\(config\.name\)\) return null/,
);
assert.doesNotMatch(
dynamicFormSource.match(
/const editableItems = useMemo\([\s\S]*?\n \);/,
)?.[0] ?? '',
/hiddenItemNames/,
);
});
test('does not expose storage analysis in Cloud settings or via a deep link', () => {
assert.match(
homeSidebarSource,