FIX: Switching composer action does not refresh composer actions content (#9791)

FIX: Switching composer action does not refresh composer actions content (#9791)

diff --git a/app/assets/javascripts/select-kit/components/composer-actions.js b/app/assets/javascripts/select-kit/components/composer-actions.js
index a3830d5..adaccf2 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;
-      this.contentChanged();
+      changeContent = true;
+    }
+
+    if (this.action !== _actionSnapshot) {
+      _actionSnapshot = this.action;
+      changeContent = true;
     }
 
-    if (isEmpty(this.content)) {
-      this.set("selectKit.isHidden", true);
+    if (changeContent) {
+      this.contentChanged();
     }
+
+    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 fb1a374..fff2e80 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 => {

GitHub sha: 7f07c513

1 Like

This commit appears in #9791 which was approved by eviltrout and jjaffeux. It was merged by eviltrout.