FIX: Cleanup PresenceChannel instances when composer closed (#14741)
I was previously relying on `this.isDestroying` returning `true` during `willDestroyElement`. This was an incorrect assumption. This commit refactors the logic into an explicit `cleanup` function, and also adds some cleanup for empty keys in the `subscribedProxy` array
This commit is contained in:
parent
103de1f20d
commit
79ad0860a2
|
@ -331,6 +331,9 @@ export default class PresenceService extends Service {
|
||||||
_removeSubscribed(channelProxy) {
|
_removeSubscribed(channelProxy) {
|
||||||
let subscribed = this._subscribedProxies[channelProxy.name];
|
let subscribed = this._subscribedProxies[channelProxy.name];
|
||||||
subscribed?.delete(channelProxy);
|
subscribed?.delete(channelProxy);
|
||||||
|
if (subscribed?.size === 0) {
|
||||||
|
delete this._subscribedProxies[channelProxy.name];
|
||||||
|
}
|
||||||
return subscribed?.size || 0;
|
return subscribed?.size || 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,11 +14,10 @@ export default Component.extend({
|
||||||
"model.replyingToTopic",
|
"model.replyingToTopic",
|
||||||
"model.editingPost",
|
"model.editingPost",
|
||||||
"model.whisper",
|
"model.whisper",
|
||||||
"model.composerOpened",
|
"model.composerOpened"
|
||||||
"isDestroying"
|
|
||||||
)
|
)
|
||||||
state(replyingToTopic, editingPost, whisper, composerOpen, isDestroying) {
|
state(replyingToTopic, editingPost, whisper, composerOpen) {
|
||||||
if (!composerOpen || isDestroying) {
|
if (!composerOpen) {
|
||||||
return;
|
return;
|
||||||
} else if (editingPost) {
|
} else if (editingPost) {
|
||||||
return "edit";
|
return "edit";
|
||||||
|
@ -73,6 +72,12 @@ export default Component.extend({
|
||||||
this._setupChannel("editChannel", this.editChannelName);
|
this._setupChannel("editChannel", this.editChannelName);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_cleanupChannels() {
|
||||||
|
this._setupChannel("replyChannel", null);
|
||||||
|
this._setupChannel("whisperChannel", null);
|
||||||
|
this._setupChannel("editChannel", null);
|
||||||
|
},
|
||||||
|
|
||||||
replyingUsers: union("replyChannel.users", "whisperChannel.users"),
|
replyingUsers: union("replyChannel.users", "whisperChannel.users"),
|
||||||
editingUsers: readOnly("editChannel.users"),
|
editingUsers: readOnly("editChannel.users"),
|
||||||
|
|
||||||
|
@ -102,7 +107,7 @@ export default Component.extend({
|
||||||
|
|
||||||
@on("willDestroyElement")
|
@on("willDestroyElement")
|
||||||
closeComposer() {
|
closeComposer() {
|
||||||
this._setupChannels();
|
this._cleanupChannels();
|
||||||
this.composerPresenceManager.leave();
|
this.composerPresenceManager.leave();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue