@@ -33,10 +33,10 @@
Cancel
diff --git a/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_dialog.js b/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_dialog.js
index 14c90ee6f2a..285c86b0e49 100644
--- a/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_dialog.js
+++ b/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_dialog.js
@@ -1,6 +1,6 @@
/** @odoo-module **/
-import { Component, markup } from "@odoo/owl";
+import { Component, useState, markup } from "@odoo/owl";
import { useService } from "@web/core/utils/hooks";
import { Dialog } from "@web/core/dialog/dialog";
import { escape } from "@web/core/utils/strings";
@@ -18,6 +18,7 @@ export class ChatGPTDialog extends Component {
setup() {
this.rpc = useService('rpc');
+ this.state = useState({ selectedMessageId: null });
}
//--------------------------------------------------------------------------
@@ -25,7 +26,7 @@ export class ChatGPTDialog extends Component {
//--------------------------------------------------------------------------
selectMessage(ev) {
- this.state.selectedMessage = +ev.currentTarget.getAttribute('data-message-index');
+ this.state.selectedMessageId = +ev.currentTarget.getAttribute('data-message-id');
}
insertMessage(ev) {
this.selectMessage(ev);
@@ -91,7 +92,7 @@ export class ChatGPTDialog extends Component {
_confirm() {
try {
this.props.close();
- const text = this.state.messages[this.state.selectedMessage]?.text;
+ const text = this.state.messages.find(message => message.id === this.state.selectedMessageId)?.text;
this.props.insert(this._postprocessGeneratedContent(text || ''));
} catch (e) {
this.props.close();
diff --git a/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_prompt_dialog.js b/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_prompt_dialog.js
index c14058f979c..6d8123568a1 100644
--- a/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_prompt_dialog.js
+++ b/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_prompt_dialog.js
@@ -21,6 +21,7 @@ export class ChatGPTPromptDialog extends ChatGPTDialog {
this.assistantAvatarUrl = `${browser.location.origin}/web_editor/static/src/img/odoobot_transparent.png`;
this.userAvatarUrl = `${browser.location.origin}/web/image?model=res.users&field=avatar_128&id=${encodeURIComponent(session.uid)}`;
this.state = useState({
+ ...this.state,
prompt: this.props.initialPrompt,
conversationHistory: [{
role: 'system',
@@ -55,10 +56,10 @@ export class ChatGPTPromptDialog extends ChatGPTDialog {
ev.preventDefault();
const prompt = this.state.prompt;
this.state.messages.push({ author: 'user', text: prompt });
- const datetime = new Date().getTime();
+ const messageId = new Date().getTime();
const conversation = { role: 'user', content: prompt };
this.state.conversationHistory.push(conversation);
- this.state.messages.push({ author: 'assistant', datetime });
+ this.state.messages.push({ author: 'assistant', id: messageId });
this.state.prompt = '';
this._generate(prompt, (content, isError) => {
if (isError) {
@@ -68,8 +69,13 @@ export class ChatGPTPromptDialog extends ChatGPTDialog {
// There was no error, add the response to the history.
this.state.conversationHistory.push({ role: 'assistant', content });
}
- const messageIndex = this.state.messages.findIndex(m => m.datetime === datetime);
- this.state.messages[messageIndex] = { author: 'assistant', text: content, isError };
+ const messageIndex = this.state.messages.findIndex(m => m.id === messageId);
+ this.state.messages[messageIndex] = {
+ author: 'assistant',
+ text: content,
+ isError,
+ id: messageId,
+ };
this._unfreezeInput();
});
}
diff --git a/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_prompt_dialog.xml b/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_prompt_dialog.xml
index 83bfb2cbec3..372210c505c 100644
--- a/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_prompt_dialog.xml
+++ b/addons/web_editor/static/src/js/wysiwyg/widgets/chatgpt_prompt_dialog.xml
@@ -30,7 +30,7 @@