FIX: discourse-presence breaks composer for users.

FIX: discourse-presence breaks composer for users.

diff --git a/plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.js.es6 b/plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.js.es6
index 72edf98..b1329b1 100644
--- a/plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.js.es6
+++ b/plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.js.es6
@@ -24,7 +24,7 @@ export default Component.extend({
 
   @on("didInsertElement")
   subscribe() {
-    this.presenceManager && this.presenceManager.subscribe();
+    this.presenceManager.subscribe();
   },
 
   @discourseComputed(
@@ -44,21 +44,19 @@ export default Component.extend({
 
   @observes("reply", "title")
   typing() {
-    if (this.presenceManager) {
-      let action = this.action;
+    let action = this.action;
 
-      if (action !== REPLY && action !== EDIT) {
-        return;
-      }
+    if (action !== REPLY && action !== EDIT) {
+      return;
+    }
 
-      const postId = this.get("post.id");
+    const postId = this.get("post.id");
 
-      this._throttle = this.presenceManager.throttlePublish(
-        action === EDIT ? EDITING : REPLYING,
-        this.whisper,
-        action === EDIT ? postId : undefined
-      );
-    }
+    this._throttle = this.presenceManager.throttlePublish(
+      action === EDIT ? EDITING : REPLYING,
+      this.whisper,
+      action === EDIT ? postId : undefined
+    );
   },
 
   @observes("whisper")
@@ -68,17 +66,15 @@ export default Component.extend({
 
   @observes("post.id")
   stopEditing() {
-    if (this.presenceManager && !this.get("post.id")) {
+    if (!this.get("post.id")) {
       this.presenceManager.publish(CLOSED, this.whisper);
     }
   },
 
   @on("willDestroyElement")
   composerClosing() {
-    if (this.presenceManager) {
-      this._cancelThrottle();
-      this.presenceManager.publish(CLOSED, this.whisper);
-    }
+    this._cancelThrottle();
+    this.presenceManager.publish(CLOSED, this.whisper);
   },
 
   _cancelThrottle() {
diff --git a/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.js.es6 b/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.js.es6
index 1f8ec4d..bedb292 100644
--- a/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.js.es6
+++ b/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.js.es6
@@ -11,11 +11,11 @@ export default Component.extend({
 
   @on("didInsertElement")
   subscribe() {
-    this.presenceManager && this.presenceManager.subscribe();
+    this.presenceManager.subscribe();
   },
 
   @on("willDestroyElement")
   _destroyed() {
-    this.presenceManager && this.presenceManager.unsubscribe();
+    this.presenceManager.unsubscribe();
   }
 });
diff --git a/plugins/discourse-presence/assets/javascripts/discourse/lib/presence-manager.js.es6 b/plugins/discourse-presence/assets/javascripts/discourse/lib/presence-manager.js.es6
index fe5c1bd..5943f76 100644
--- a/plugins/discourse-presence/assets/javascripts/discourse/lib/presence-manager.js.es6
+++ b/plugins/discourse-presence/assets/javascripts/discourse/lib/presence-manager.js.es6
@@ -97,6 +97,8 @@ const PresenceManager = EmberObject.extend({
   },
 
   publish(state, whisper, postId) {
+    if (this.get("currentUser.hide_profile_and_presence")) return;
+
     const data = {
       state,
       topic_id: this.get("topic.id")
diff --git a/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/composer-fields/presence.js.es6 b/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/composer-fields/presence.js.es6
index 00fbc34..0240e68 100644
--- a/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/composer-fields/presence.js.es6
+++ b/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/composer-fields/presence.js.es6
@@ -1,5 +1,9 @@
 export default {
-  shouldRender(_, ctx) {
-    return ctx.siteSettings.presence_enabled;
+  shouldRender(args, component) {
+    return (
+      component.siteSettings.presence_enabled &&
+      args.model.topic &&
+      args.model.topic.presenceManager
+    );
   }
 };
diff --git a/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/topic-above-footer-buttons/presence.js.es6 b/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/topic-above-footer-buttons/presence.js.es6
index 00fbc34..db452d5 100644
--- a/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/topic-above-footer-buttons/presence.js.es6
+++ b/plugins/discourse-presence/assets/javascripts/discourse/templates/connectors/topic-above-footer-buttons/presence.js.es6
@@ -1,5 +1,7 @@
 export default {
-  shouldRender(_, ctx) {
-    return ctx.siteSettings.presence_enabled;
+  shouldRender(args, component) {
+    return (
+      component.siteSettings.presence_enabled && args.model.presenceManager
+    );
   }
 };
diff --git a/plugins/discourse-presence/assets/javascripts/initializers/discourse-presence.js.es6 b/plugins/discourse-presence/assets/javascripts/initializers/discourse-presence.js.es6
index 27a7252..98ec813 100644
--- a/plugins/discourse-presence/assets/javascripts/initializers/discourse-presence.js.es6
+++ b/plugins/discourse-presence/assets/javascripts/initializers/discourse-presence.js.es6
@@ -6,7 +6,7 @@ function initializeDiscoursePresence(api) {
   const currentUser = api.getCurrentUser();
   const siteSettings = api.container.lookup("site-settings:main");
 
-  if (currentUser && !currentUser.hide_profile_and_presence) {
+  if (currentUser) {
     api.modifyClass("model:topic", {
       presenceManager: null
     });

GitHub sha: ae54a337