FIX: introduces onSelectAny (regroup onSelect and onSelectNone) (#7594)

FIX: introduces onSelectAny (regroup onSelect and onSelectNone) (#7594)

diff --git a/app/assets/javascripts/discourse/controllers/topic.js.es6 b/app/assets/javascripts/discourse/controllers/topic.js.es6
index a340b95..cca7caf 100644
--- a/app/assets/javascripts/discourse/controllers/topic.js.es6
+++ b/app/assets/javascripts/discourse/controllers/topic.js.es6
@@ -223,6 +223,10 @@ export default Ember.Controller.extend(bufferedProperty("model"), {
   },
 
   actions: {
+    topicCategoryChanged(selection) {
+      this.set("buffered.category_id", selection.value);
+    },
+
     deletePending(pending) {
       return ajax(`/review/${pending.id}`, { type: "DELETE" })
         .then(() => {
diff --git a/app/assets/javascripts/discourse/templates/topic.hbs b/app/assets/javascripts/discourse/templates/topic.hbs
index 48bd3d0..b47f793 100644
--- a/app/assets/javascripts/discourse/templates/topic.hbs
+++ b/app/assets/javascripts/discourse/templates/topic.hbs
@@ -25,7 +25,7 @@
               {{category-chooser
                 class="small"
                 value=(unbound buffered.category_id)
-                onSelect=(action (mut buffered.category_id))}}
+                onSelectAny=(action "topicCategoryChanged")}}
             {{/if}}
 
             {{#if canEditTags}}
diff --git a/app/assets/javascripts/select-kit/components/single-select.js.es6 b/app/assets/javascripts/select-kit/components/single-select.js.es6
index 5ddf7cd..4d8f9b9 100644
--- a/app/assets/javascripts/select-kit/components/single-select.js.es6
+++ b/app/assets/javascripts/select-kit/components/single-select.js.es6
@@ -223,6 +223,7 @@ export default SelectKitComponent.extend({
       );
 
       this._boundaryActionHandler("onSelect", computedContentItem.value);
+      this._boundaryActionHandler("onSelectAny", computedContentItem);
       return;
     }
 
@@ -239,6 +240,7 @@ export default SelectKitComponent.extend({
         this
       );
       this._boundaryActionHandler("onSelectNone");
+      this._boundaryActionHandler("onSelectAny", computedContentItem);
       this.clearSelection();
       return;
     }
@@ -291,6 +293,7 @@ export default SelectKitComponent.extend({
         );
 
         this._boundaryActionHandler("onSelect", computedContentItem.value);
+        this._boundaryActionHandler("onSelectAny", computedContentItem);
 
         this.autoHighlight();
       });
diff --git a/test/javascripts/components/single-select-test.js.es6 b/test/javascripts/components/single-select-test.js.es6
index ca6a84e..8e24797 100644
--- a/test/javascripts/components/single-select-test.js.es6
+++ b/test/javascripts/components/single-select-test.js.es6
@@ -924,3 +924,37 @@ componentTest("noopRow", {
     assert.equal(this.get("value"), "green");
   }
 });
+
+componentTest("onSelectAny", {
+  template: `<div class='test-external-action'></div>{{single-select none="none" content=content onSelectAny=(action externalAction)}}`,
+
+  beforeEach() {
+    this.set("externalAction", actual => {
+      find(".test-external-action").text(actual.value);
+    });
+
+    this.set("content", ["blue"]);
+  },
+
+  async test(assert) {
+    await this.get("subject").expand();
+    await this.get("subject").selectRowByValue("blue");
+
+    assert.equal(
+      find(".test-external-action")
+        .text()
+        .trim(),
+      "blue"
+    );
+
+    await this.get("subject").expand();
+    await this.get("subject").selectNoneRow();
+
+    assert.equal(
+      find(".test-external-action")
+        .text()
+        .trim(),
+      "__none__"
+    );
+  }
+});

GitHub sha: 049561ac

1 Like

This commit has been mentioned on Discourse Meta. There might be relevant details there: