FIX: prevents registering multiple `topic-notifications-button:changed` (#9356)

FIX: prevents registering multiple topic-notifications-button:changed (#9356)

A large topic page will always have the bottom tracking button, and will also have the timeline, meaning we already had 2 tracking events.

But it gets even worse when you know that the timeline button is a component connector which will trigger didInsertElement very frequently, meaning we were constantly adding more and more appEvents handlers.

diff --git a/app/assets/javascripts/discourse/widgets/topic-timeline.js b/app/assets/javascripts/discourse/widgets/topic-timeline.js
index 617a13b..5f3cabf 100644
--- a/app/assets/javascripts/discourse/widgets/topic-timeline.js
+++ b/app/assets/javascripts/discourse/widgets/topic-timeline.js
@@ -388,7 +388,8 @@ createWidget("timeline-footer-controls", {
             topic,
             showFullTitle: false,
             appendReason: false,
-            placement: "bottom-end"
+            placement: "bottom-end",
+            mountedAsWidget: true
           },
           ["notificationLevel"]
         )
diff --git a/app/assets/javascripts/select-kit/components/topic-notifications-button.js b/app/assets/javascripts/select-kit/components/topic-notifications-button.js
index 747685c..a0c1673 100644
--- a/app/assets/javascripts/select-kit/components/topic-notifications-button.js
+++ b/app/assets/javascripts/select-kit/components/topic-notifications-button.js
@@ -10,21 +10,25 @@ export default Component.extend({
   didInsertElement() {
     this._super(...arguments);
 
-    this.appEvents.on(
-      "topic-notifications-button:changed",
-      this,
-      "_changeTopicNotificationLevel"
-    );
+    if (!this.mountedAsWidget) {
+      this.appEvents.on(
+        "topic-notifications-button:changed",
+        this,
+        "_changeTopicNotificationLevel"
+      );
+    }
   },
 
   willDestroyElement() {
     this._super(...arguments);
 
-    this.appEvents.off(
-      "topic-notifications-button:changed",
-      this,
-      "_changeTopicNotificationLevel"
-    );
+    if (!this.mountedAsWidget) {
+      this.appEvents.off(
+        "topic-notifications-button:changed",
+        this,
+        "_changeTopicNotificationLevel"
+      );
+    }
   },
 
   _changeTopicNotificationLevel(level) {

GitHub sha: a947b7b8

This commit appears in #9356 which was merged by jjaffeux.