From 7f07c513a73b928807244ec66db3e3b1ca13dae0 Mon Sep 17 00:00:00 2001 From: Alan Guo Xiang Tan Date: Sat, 16 May 2020 01:54:44 +0800 Subject: [PATCH] FIX: Switching composer action does not refresh composer actions content (#9791) --- .../select-kit/components/composer-actions.js | 18 ++++++++++++++---- .../acceptance/composer-actions-test.js | 12 +++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/select-kit/components/composer-actions.js b/app/assets/javascripts/select-kit/components/composer-actions.js index a3830d5ae0a..adaccf2953c 100644 --- a/app/assets/javascripts/select-kit/components/composer-actions.js +++ b/app/assets/javascripts/select-kit/components/composer-actions.js @@ -16,10 +16,12 @@ import { isEmpty } from "@ember/utils"; // Component can get destroyed and lose state let _topicSnapshot = null; let _postSnapshot = null; +let _actionSnapshot = null; export function _clearSnapshots() { _topicSnapshot = null; _postSnapshot = null; + _actionSnapshot = null; } export default DropdownSelectBoxComponent.extend({ @@ -50,6 +52,7 @@ export default DropdownSelectBoxComponent.extend({ didReceiveAttrs() { this._super(...arguments); + let changeContent = false; // if we change topic we want to change both snapshots if ( @@ -58,18 +61,25 @@ export default DropdownSelectBoxComponent.extend({ ) { _topicSnapshot = this.topic; _postSnapshot = this.post; - this.contentChanged(); + changeContent = true; } // if we hit reply on a different post we want to change postSnapshot if (this.post && (!_postSnapshot || this.post.id !== _postSnapshot.id)) { _postSnapshot = this.post; + changeContent = true; + } + + if (this.action !== _actionSnapshot) { + _actionSnapshot = this.action; + changeContent = true; + } + + if (changeContent) { this.contentChanged(); } - if (isEmpty(this.content)) { - this.set("selectKit.isHidden", true); - } + this.set("selectKit.isHidden", isEmpty(this.content)); }, modifySelection() { diff --git a/test/javascripts/acceptance/composer-actions-test.js b/test/javascripts/acceptance/composer-actions-test.js index fb1a374dc3c..fff2e804f6c 100644 --- a/test/javascripts/acceptance/composer-actions-test.js +++ b/test/javascripts/acceptance/composer-actions-test.js @@ -148,12 +148,18 @@ QUnit.test("reply_as_new_topic without a new_topic draft", async assert => { }); QUnit.test("hide component if no content", async assert => { - const composerActions = selectKit(".composer-actions"); + await visit("/"); + await click("button#create-topic"); - await visit("/u/eviltrout/messages"); - await click(".new-private-message"); + const composerActions = selectKit(".composer-actions"); + await composerActions.expand(); + await composerActions.selectRowByValue("reply_as_private_message"); assert.ok(composerActions.el().hasClass("is-hidden")); + + await click("button#create-topic"); + await composerActions.expand(); + assert.equal(composerActions.rows().length, 2); }); QUnit.test("interactions", async assert => {