diff --git a/addons/mail/static/src/core/web/chatter.js b/addons/mail/static/src/core/web/chatter.js index baaeac65846..3b3427f4a2c 100644 --- a/addons/mail/static/src/core/web/chatter.js +++ b/addons/mail/static/src/core/web/chatter.js @@ -280,13 +280,28 @@ export class Chatter extends Component { document.body.click(); // hack to close dropdown } - async onClickFollow() { - await this.orm.call(this.props.threadModel, "message_subscribe", [[this.props.threadId]], { + async _follow(threadModel, threadId) { + await this.orm.call(threadModel, "message_subscribe", [[threadId]], { partner_ids: [this.store.self.id], }); this.onFollowerChanged(); } + async onClickFollow() { + if (this.props.threadId) { + this._follow(this.props.threadModel, this.props.threadId); + } else { + this.onNextUpdate = (nextProps) => { + if (nextProps.threadId) { + this._follow(nextProps.threadModel, nextProps.threadId); + } else { + return true; + } + }; + await this.props.saveRecord?.(); + } + } + /** * @param {MouseEvent} ev * @param {import("@mail/core/common/follower_model").Follower} follower diff --git a/addons/mail/static/tests/web/follow_button_tests.js b/addons/mail/static/tests/web/follow_button_tests.js index 93f647d2540..6a7cfb065e8 100644 --- a/addons/mail/static/tests/web/follow_button_tests.js +++ b/addons/mail/static/tests/web/follow_button_tests.js @@ -57,6 +57,27 @@ QUnit.test('click on "follow" button', async (assert) => { assert.containsOnce($, "button:contains(Following)"); }); +QUnit.test('Click on "follow" button should save draft record', async (assert) => { + const views = { + "res.partner,false,form": ` +
+ + + +
+ +
+
`, + }; + const { openFormView } = await start({ serverData: { views } }); + await openFormView("res.partner"); + assert.containsOnce($, "button:contains(Follow)"); + assert.containsOnce($, "div.o_field_char"); + + await click("button:contains(Follow)"); + assert.containsOnce($, "div.o_field_invalid"); +}); + QUnit.test('click on "unfollow" button', async (assert) => { const pyEnv = await startServer(); const threadId = pyEnv["res.partner"].create({});