mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-18 06:47:02 +08:00
fix(core): generate the image cannot enter text prompt (#12717)
Close [AI-167](https://linear.app/affine-design/issue/AI-167)   <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Improved AI panel behavior with explicit modes for input and answer generation, providing a more intuitive user experience when interacting with AI features. - **Refactor** - Streamlined AI panel toggling logic for more consistent and predictable panel states during different actions. - **Tests** - Enhanced AI image generation test to simulate user input and send actions for more accurate end-to-end validation. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -208,7 +208,18 @@ export function actionToHandler<T extends keyof BlockSuitePresets.AIActions>(
|
||||
if (!blocks || blocks.length === 0) return;
|
||||
const block = blocks.at(-1);
|
||||
if (!block) return;
|
||||
aiPanel.toggle(block, '');
|
||||
if (
|
||||
blocks.length === 1 &&
|
||||
block.model.flavour === 'affine:image' &&
|
||||
id === 'createImage'
|
||||
) {
|
||||
// if only one image block is selected, and the action is createImage
|
||||
// toggle panel to allow user to enter text prompt
|
||||
aiPanel.toggle(block, 'input');
|
||||
} else {
|
||||
// generate the answer
|
||||
aiPanel.toggle(block, 'generate');
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -232,7 +243,7 @@ export function handleInlineAskAIAction(
|
||||
});
|
||||
|
||||
if (!actionGroups) {
|
||||
panel.toggle(block);
|
||||
panel.toggle(block, 'input');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -252,7 +263,7 @@ export function handleInlineAskAIAction(
|
||||
clear();
|
||||
};
|
||||
|
||||
panel.toggle(block);
|
||||
panel.toggle(block, 'input');
|
||||
|
||||
setTimeout(() => {
|
||||
abortController = new AbortController();
|
||||
|
||||
@@ -457,7 +457,7 @@ export function actionToHandler<T extends keyof BlockSuitePresets.AIActions>(
|
||||
|
||||
togglePanel()
|
||||
.then(isEmpty => {
|
||||
aiPanel.toggle(referenceElement, isEmpty ? undefined : '', false);
|
||||
aiPanel.toggle(referenceElement, isEmpty ? 'input' : 'generate');
|
||||
})
|
||||
.catch(console.error);
|
||||
};
|
||||
|
||||
@@ -333,20 +333,14 @@ export class AffineAIPanelWidget extends WidgetComponent {
|
||||
}
|
||||
};
|
||||
|
||||
toggle = (
|
||||
reference: Element,
|
||||
input?: string,
|
||||
shouldTriggerCallback?: boolean
|
||||
) => {
|
||||
if (typeof input === 'string') {
|
||||
this._inputText = input;
|
||||
toggle = (reference: Element, type: 'input' | 'generate') => {
|
||||
if (type === 'generate') {
|
||||
this._inputText = '';
|
||||
this.generate();
|
||||
} else {
|
||||
// reset state
|
||||
this.hide(shouldTriggerCallback);
|
||||
} else if (type === 'input') {
|
||||
this.hide();
|
||||
this.state = 'input';
|
||||
}
|
||||
|
||||
this._autoUpdatePosition(reference);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user