From e1bdb6e57c78545db643cc6abf15c8cae7de9b75 Mon Sep 17 00:00:00 2001 From: Drol Date: Mon, 27 Jul 2026 15:38:23 +0800 Subject: [PATCH] fix(plugin-ai): fix Operator variable selector submenu (#10167) * fix(plugin-ai): fix Operator variable cascader not expanding sub-menus Set changeOnSelect={false} on Variable.Input in UsersSelect so that clicking a first-level variable category expands its children instead of immediately firing onChange and collapsing the dropdown. Also set nullable={false} to remove the Null option since Operator is a required field. * fix(plugin-ai): handle operator workflow variables --- .../__tests__/users-select.test.tsx | 46 +++++++++++++++++++ .../employee/components/users-select.tsx | 22 ++------- .../nodes/employee/flow-models/task.tsx | 3 -- 3 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/components/__tests__/users-select.test.tsx diff --git a/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/components/__tests__/users-select.test.tsx b/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/components/__tests__/users-select.test.tsx new file mode 100644 index 00000000000..fe47e1eb692 --- /dev/null +++ b/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/components/__tests__/users-select.test.tsx @@ -0,0 +1,46 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +import React from 'react'; +import { describe, expect, it, vi } from 'vitest'; + +const { useWorkflowVariableOptions } = vi.hoisted(() => ({ + useWorkflowVariableOptions: vi.fn((_options: { types: Array<(field: unknown) => boolean> }) => []), +})); + +vi.mock('@nocobase/client', () => ({ + RemoteSelect: () => null, + Variable: { + Input: () => null, + }, +})); + +vi.mock('@nocobase/plugin-workflow/client', () => ({ + useWorkflowVariableOptions, +})); + +import { UsersSelect } from '../users-select'; + +describe('UsersSelect', () => { + it('passes variable expressions through and accepts context user fields', () => { + const onChange = vi.fn(); + const element = UsersSelect({ + value: '{{$context.data}}', + onChange, + }) as React.ReactElement<{ value: string; onChange: (value: string) => void }>; + + expect(element.props.value).toBe('{{$context.data}}'); + expect(element.props.onChange).toBe(onChange); + + const [{ types }] = useWorkflowVariableOptions.mock.calls[0]; + const [isUserKeyField] = types; + expect(isUserKeyField({ type: 'context', target: 'users' })).toBe(true); + expect(isUserKeyField({ type: 'context', target: 'posts' })).toBe(false); + }); +}); diff --git a/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/components/users-select.tsx b/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/components/users-select.tsx index d1720cc3f7f..828ba065071 100644 --- a/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/components/users-select.tsx +++ b/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/components/users-select.tsx @@ -18,25 +18,11 @@ function isUserKeyField(field) { return field.collectionName === 'users' && field.name === 'id'; } -export function UsersSelect({ disabled = false, multiple = false, value, onChange }) { +export function UsersSelect({ value, onChange }) { const scope = useWorkflowVariableOptions({ types: [isUserKeyField] }); - const handleSelectChanged = (v) => { - if (multiple) { - onChange(Array.isArray(v) ? v : [v]); - } else { - onChange(v); - } - }; - return ( - { - onChange([next]); - }} - > + ); diff --git a/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/flow-models/task.tsx b/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/flow-models/task.tsx index 29ab42ef977..2a747a116d3 100644 --- a/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/flow-models/task.tsx +++ b/packages/plugins/@nocobase/plugin-ai/src/client/workflow/nodes/employee/flow-models/task.tsx @@ -53,9 +53,6 @@ export class AIEmployeeTaskModel extends FlowModel { }), }, 'x-component': UsersSelect, - 'x-component-props': { - multiple: false, - }, required: true, }, message: {