This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.js.es6
2019-05-27 10:15:39 +02:00

60 lines
1.3 KiB
JavaScript

import {
default as computed,
on
} from "ember-addons/ember-computed-decorators";
import {
keepAliveDuration,
bufferTime
} from "discourse/plugins/discourse-presence/discourse/components/composer-presence-display";
const MB_GET_LAST_MESSAGE = -2;
export default Ember.Component.extend({
topicId: null,
presenceUsers: null,
clear() {
if (!this.isDestroyed) this.set("presenceUsers", []);
},
@on("didInsertElement")
_inserted() {
this.clear();
this.messageBus.subscribe(
this.channel,
message => {
if (!this.isDestroyed) this.set("presenceUsers", message.users);
this._clearTimer = Ember.run.debounce(
this,
"clear",
keepAliveDuration + bufferTime
);
},
MB_GET_LAST_MESSAGE
);
},
@on("willDestroyElement")
_destroyed() {
Ember.run.cancel(this._clearTimer);
this.messageBus.unsubscribe(this.channel);
},
@computed("topicId")
channel(topicId) {
return `/presence/topic/${topicId}`;
},
@computed("presenceUsers", "currentUser.{id,ignored_users}")
users(users, currentUser) {
const ignoredUsers = currentUser.ignored_users || [];
return (users || []).filter(
user =>
user.id !== currentUser.id && !ignoredUsers.includes(user.username)
);
},
shouldDisplay: Ember.computed.gt("users.length", 0)
});