feat(AI设计): 支持输入框回车发送

需求:AI 设计输入框监听 Enter 并发送消息。

实现:复用现有发送链路,保留 Shift+Enter 换行并保护输入法组合状态;补充聚焦回归测试。
This commit is contained in:
2026-08-06 16:46:19 +08:00
parent 7b23cce67a
commit 4980894017
3 changed files with 91 additions and 5 deletions

View File

@@ -372,6 +372,42 @@ describe('ImageCanvas Workspace-first design experience', () => {
expect(confirmImageWorkspaceGenerationMock).not.toHaveBeenCalled();
});
it('sends the design message with Enter', async () => {
render(<MemoryRouter><ImageCanvas /></MemoryRouter>);
await screen.findByText('云端角色设定');
const composer = screen.getByLabelText('设计需求');
fireEvent.change(composer, {
target: { value: '让画面增加一层晨雾' },
});
fireEvent.keyDown(composer, { key: 'Enter' });
await waitFor(() => expect(sendImageWorkspaceMessageMock).toHaveBeenCalledWith(
'workspace-cloud',
1,
'让画面增加一层晨雾',
expect.stringMatching(/^turn-/),
));
expect(composer).toHaveValue('');
expect(screen.getByTestId('image-workspace-composer'))
.toHaveTextContent('Enter 发送 · Shift+Enter 换行');
});
it('keeps Shift+Enter for newlines and ignores Enter during IME composition', async () => {
render(<MemoryRouter><ImageCanvas /></MemoryRouter>);
await screen.findByText('云端角色设定');
const composer = screen.getByLabelText('设计需求');
fireEvent.change(composer, {
target: { value: '正在输入中文设计描述' },
});
fireEvent.keyDown(composer, { key: 'Enter', shiftKey: true });
fireEvent.keyDown(composer, { key: 'Enter', isComposing: true });
expect(sendImageWorkspaceMessageMock).not.toHaveBeenCalled();
expect(composer).toHaveValue('正在输入中文设计描述');
});
it('renders the pending user turn and assistant deltas while the command is running', async () => {
const response = deferred<DesignWorkspace>();
sendImageWorkspaceMessageMock.mockReturnValueOnce(response.promise);