mirror of
https://github.com/discourse/discourse.git
synced 2024-11-27 03:10:46 -06:00
DEV: Allow onStateChange
callbacks for PM topic tracking state. (#14479)
The changes here are in anticipation of a private plugin that will soon be merged into Discourse core.
This commit is contained in:
parent
d82e5cd37c
commit
085eb56ea4
@ -25,6 +25,11 @@ const PrivateMessageTopicTrackingState = EmberObject.extend({
|
|||||||
this.statesModificationCounter = 0;
|
this.statesModificationCounter = 0;
|
||||||
this.isTracking = false;
|
this.isTracking = false;
|
||||||
this.newIncoming = [];
|
this.newIncoming = [];
|
||||||
|
this.stateChangeCallbacks = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
onStateChange(name, callback) {
|
||||||
|
this.stateChangeCallbacks[name] = callback;
|
||||||
},
|
},
|
||||||
|
|
||||||
startTracking() {
|
startTracking() {
|
||||||
@ -34,7 +39,7 @@ const PrivateMessageTopicTrackingState = EmberObject.extend({
|
|||||||
|
|
||||||
this._establishChannels();
|
this._establishChannels();
|
||||||
|
|
||||||
this._loadInitialState().finally(() => {
|
return this._loadInitialState().finally(() => {
|
||||||
this.set("isTracking", true);
|
this.set("isTracking", true);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -98,7 +103,7 @@ const PrivateMessageTopicTrackingState = EmberObject.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
topicIds.forEach((topicId) => this.states.delete(topicId));
|
topicIds.forEach((topicId) => this.states.delete(topicId));
|
||||||
this.incrementProperty("statesModificationCounter");
|
this._afterStateChange();
|
||||||
},
|
},
|
||||||
|
|
||||||
_userChannel() {
|
_userChannel() {
|
||||||
@ -236,9 +241,14 @@ const PrivateMessageTopicTrackingState = EmberObject.extend({
|
|||||||
this.states.set(topicId, newState);
|
this.states.set(topicId, newState);
|
||||||
|
|
||||||
if (!opts.skipIncrement) {
|
if (!opts.skipIncrement) {
|
||||||
this.incrementProperty("statesModificationCounter");
|
this._afterStateChange();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_afterStateChange() {
|
||||||
|
this.incrementProperty("statesModificationCounter");
|
||||||
|
Object.values(this.stateChangeCallbacks).forEach((callback) => callback());
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default PrivateMessageTopicTrackingState;
|
export default PrivateMessageTopicTrackingState;
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
import { test } from "qunit";
|
||||||
|
import { discourseModule } from "discourse/tests/helpers/qunit-helpers";
|
||||||
|
import MessageBus from "message-bus-client";
|
||||||
|
import PrivateMessageTopicTrackingState from "discourse/models/private-message-topic-tracking-state";
|
||||||
|
import User from "discourse/models/user";
|
||||||
|
|
||||||
|
discourseModule(
|
||||||
|
"Unit | Model | private-message-topic-tracking-state",
|
||||||
|
function (hooks) {
|
||||||
|
let pmTopicTrackingState;
|
||||||
|
|
||||||
|
hooks.beforeEach(function () {
|
||||||
|
pmTopicTrackingState = PrivateMessageTopicTrackingState.create({
|
||||||
|
messageBus: MessageBus,
|
||||||
|
currentUser: User.create({ id: 1, username: "test" }),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test("modifying state calls onStateChange callbacks", function (assert) {
|
||||||
|
let callbackCalled = false;
|
||||||
|
|
||||||
|
pmTopicTrackingState.onStateChange("testing", () => {
|
||||||
|
callbackCalled = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
pmTopicTrackingState.set("isTracking", true);
|
||||||
|
pmTopicTrackingState.removeTopics([]);
|
||||||
|
|
||||||
|
assert.ok(callbackCalled);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
Loading…
Reference in New Issue
Block a user