mirror of
https://github.com/discourse/discourse.git
synced 2025-06-01 09:08:10 +08:00
FIX: count new and unread respects muted categories (#10131)
* FIX: count new and unread respects muted categories countCategoryByState function should take categories muted by the user into consideration
This commit is contained in:

committed by
GitHub

parent
8ceb7f490f
commit
d9475b70c7
@ -408,26 +408,31 @@ const TopicTrackingState = EmberObject.extend({
|
|||||||
return new Set(result);
|
return new Set(result);
|
||||||
},
|
},
|
||||||
|
|
||||||
countCategoryByState(fn, categoryId, tagId) {
|
countCategoryByState(type, categoryId, tagId) {
|
||||||
const subcategoryIds = this.getSubCategoryIds(categoryId);
|
const subcategoryIds = this.getSubCategoryIds(categoryId);
|
||||||
|
const mutedCategoryIds =
|
||||||
|
this.currentUser && this.currentUser.muted_category_ids;
|
||||||
return _.chain(this.states)
|
return _.chain(this.states)
|
||||||
.filter(fn)
|
.filter(type === "new" ? isNew : isUnread)
|
||||||
.filter(
|
.filter(
|
||||||
topic =>
|
topic =>
|
||||||
topic.archetype !== "private_message" &&
|
topic.archetype !== "private_message" &&
|
||||||
!topic.deleted &&
|
!topic.deleted &&
|
||||||
(!categoryId || subcategoryIds.has(topic.category_id)) &&
|
(!categoryId || subcategoryIds.has(topic.category_id)) &&
|
||||||
(!tagId || (topic.tags && topic.tags.indexOf(tagId) > -1))
|
(!tagId || (topic.tags && topic.tags.indexOf(tagId) > -1)) &&
|
||||||
|
(type !== "new" ||
|
||||||
|
!mutedCategoryIds ||
|
||||||
|
mutedCategoryIds.indexOf(topic.category_id) === -1)
|
||||||
)
|
)
|
||||||
.value().length;
|
.value().length;
|
||||||
},
|
},
|
||||||
|
|
||||||
countNew(categoryId, tagId) {
|
countNew(categoryId, tagId) {
|
||||||
return this.countCategoryByState(isNew, categoryId, tagId);
|
return this.countCategoryByState("new", categoryId, tagId);
|
||||||
},
|
},
|
||||||
|
|
||||||
countUnread(categoryId, tagId) {
|
countUnread(categoryId, tagId) {
|
||||||
return this.countCategoryByState(isUnread, categoryId, tagId);
|
return this.countCategoryByState("unread", categoryId, tagId);
|
||||||
},
|
},
|
||||||
|
|
||||||
countTags(tags) {
|
countTags(tags) {
|
||||||
|
@ -189,9 +189,18 @@ QUnit.test("countNew", assert => {
|
|||||||
slug: "baz",
|
slug: "baz",
|
||||||
parent_category_id: bar.id
|
parent_category_id: bar.id
|
||||||
});
|
});
|
||||||
sandbox.stub(Category, "list").returns([foo, bar, baz]);
|
const qux = store.createRecord("category", {
|
||||||
|
id: 4,
|
||||||
|
slug: "qux"
|
||||||
|
});
|
||||||
|
sandbox.stub(Category, "list").returns([foo, bar, baz, qux]);
|
||||||
|
|
||||||
const state = TopicTrackingState.create();
|
let currentUser = User.create({
|
||||||
|
username: "chuck",
|
||||||
|
muted_category_ids: [4]
|
||||||
|
});
|
||||||
|
|
||||||
|
const state = TopicTrackingState.create({ currentUser });
|
||||||
|
|
||||||
assert.equal(state.countNew(1), 0);
|
assert.equal(state.countNew(1), 0);
|
||||||
assert.equal(state.countNew(2), 0);
|
assert.equal(state.countNew(2), 0);
|
||||||
@ -233,6 +242,13 @@ QUnit.test("countNew", assert => {
|
|||||||
assert.equal(state.countNew(1), 3);
|
assert.equal(state.countNew(1), 3);
|
||||||
assert.equal(state.countNew(2), 2);
|
assert.equal(state.countNew(2), 2);
|
||||||
assert.equal(state.countNew(3), 1);
|
assert.equal(state.countNew(3), 1);
|
||||||
|
|
||||||
|
state.states["t115"] = {
|
||||||
|
last_read_post_number: null,
|
||||||
|
id: 115,
|
||||||
|
category_id: 4
|
||||||
|
};
|
||||||
|
assert.equal(state.countNew(4), 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test("mute topic", function(assert) {
|
QUnit.test("mute topic", function(assert) {
|
||||||
|
Reference in New Issue
Block a user