mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Refactor model/post-stream to support any filter. (#16081)
The current implementation ties the filter query params tightly to the `summary` attribute on the post stream model making it hard to support other filters.
This commit is contained in:
committed by
GitHub
parent
e3b4998efc
commit
d52aa6a51b
@@ -1,4 +1,4 @@
|
|||||||
import { and, not, or } from "@ember/object/computed";
|
import { and, equal, not, or } from "@ember/object/computed";
|
||||||
import DiscourseURL from "discourse/lib/url";
|
import DiscourseURL from "discourse/lib/url";
|
||||||
import I18n from "I18n";
|
import I18n from "I18n";
|
||||||
import PostsWithPlaceholders from "discourse/lib/posts-with-placeholders";
|
import PostsWithPlaceholders from "discourse/lib/posts-with-placeholders";
|
||||||
@@ -37,7 +37,6 @@ export default RestModel.extend({
|
|||||||
posts: null,
|
posts: null,
|
||||||
stream: null,
|
stream: null,
|
||||||
userFilters: null,
|
userFilters: null,
|
||||||
summary: null,
|
|
||||||
loaded: null,
|
loaded: null,
|
||||||
loadingAbove: null,
|
loadingAbove: null,
|
||||||
loadingBelow: null,
|
loadingBelow: null,
|
||||||
@@ -48,6 +47,7 @@ export default RestModel.extend({
|
|||||||
timelineLookup: null,
|
timelineLookup: null,
|
||||||
filterRepliesToPostNumber: null,
|
filterRepliesToPostNumber: null,
|
||||||
filterUpwardsPostID: null,
|
filterUpwardsPostID: null,
|
||||||
|
filter: null,
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this._identityMap = {};
|
this._identityMap = {};
|
||||||
@@ -62,7 +62,6 @@ export default RestModel.extend({
|
|||||||
postsWithPlaceholders,
|
postsWithPlaceholders,
|
||||||
stream: [],
|
stream: [],
|
||||||
userFilters: [],
|
userFilters: [],
|
||||||
summary: false,
|
|
||||||
filterRepliesToPostNumber:
|
filterRepliesToPostNumber:
|
||||||
parseInt(this.get("topic.replies_to_post_number"), 10) || false,
|
parseInt(this.get("topic.replies_to_post_number"), 10) || false,
|
||||||
filterUpwardsPostID: false,
|
filterUpwardsPostID: false,
|
||||||
@@ -78,6 +77,8 @@ export default RestModel.extend({
|
|||||||
loading: or("loadingAbove", "loadingBelow", "loadingFilter", "stagingPost"),
|
loading: or("loadingAbove", "loadingBelow", "loadingFilter", "stagingPost"),
|
||||||
notLoading: not("loading"),
|
notLoading: not("loading"),
|
||||||
|
|
||||||
|
summary: equal("filter", "summary"),
|
||||||
|
|
||||||
@discourseComputed(
|
@discourseComputed(
|
||||||
"isMegaTopic",
|
"isMegaTopic",
|
||||||
"stream.length",
|
"stream.length",
|
||||||
@@ -137,7 +138,7 @@ export default RestModel.extend({
|
|||||||
params for the stream.
|
params for the stream.
|
||||||
**/
|
**/
|
||||||
@discourseComputed(
|
@discourseComputed(
|
||||||
"summary",
|
"filter",
|
||||||
"userFilters.[]",
|
"userFilters.[]",
|
||||||
"filterRepliesToPostNumber",
|
"filterRepliesToPostNumber",
|
||||||
"filterUpwardsPostID"
|
"filterUpwardsPostID"
|
||||||
@@ -145,8 +146,8 @@ export default RestModel.extend({
|
|||||||
streamFilters() {
|
streamFilters() {
|
||||||
const result = {};
|
const result = {};
|
||||||
|
|
||||||
if (this.summary) {
|
if (this.filter) {
|
||||||
result.filter = "summary";
|
result.filter = this.filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
const userFilters = this.userFilters;
|
const userFilters = this.userFilters;
|
||||||
@@ -235,10 +236,10 @@ export default RestModel.extend({
|
|||||||
cancelFilter() {
|
cancelFilter() {
|
||||||
this.setProperties({
|
this.setProperties({
|
||||||
userFilters: [],
|
userFilters: [],
|
||||||
summary: false,
|
|
||||||
filterRepliesToPostNumber: false,
|
filterRepliesToPostNumber: false,
|
||||||
filterUpwardsPostID: false,
|
filterUpwardsPostID: false,
|
||||||
mixedHiddenPosts: false,
|
mixedHiddenPosts: false,
|
||||||
|
filter: null,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -252,7 +253,7 @@ export default RestModel.extend({
|
|||||||
|
|
||||||
showSummary() {
|
showSummary() {
|
||||||
this.cancelFilter();
|
this.cancelFilter();
|
||||||
this.set("summary", true);
|
this.set("filter", "summary");
|
||||||
return this.refreshAndJumptoSecondVisible();
|
return this.refreshAndJumptoSecondVisible();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ const TopicRoute = DiscourseRoute.extend({
|
|||||||
|
|
||||||
setupParams(topic, params) {
|
setupParams(topic, params) {
|
||||||
const postStream = topic.get("postStream");
|
const postStream = topic.get("postStream");
|
||||||
postStream.set("summary", get(params, "filter") === "summary");
|
postStream.set("filter", get(params, "filter"));
|
||||||
|
|
||||||
const usernames = get(params, "username_filters"),
|
const usernames = get(params, "username_filters"),
|
||||||
userFilters = postStream.get("userFilters");
|
userFilters = postStream.get("userFilters");
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ module("Unit | Model | post-stream", function () {
|
|||||||
|
|
||||||
sinon.stub(postStream, "refresh").returns(Promise.resolve());
|
sinon.stub(postStream, "refresh").returns(Promise.resolve());
|
||||||
|
|
||||||
postStream.set("summary", true);
|
postStream.set("filter", "summary");
|
||||||
postStream.cancelFilter();
|
postStream.cancelFilter();
|
||||||
assert.ok(!postStream.get("summary"), "summary is cancelled");
|
assert.ok(!postStream.get("summary"), "summary is cancelled");
|
||||||
|
|
||||||
@@ -391,7 +391,7 @@ module("Unit | Model | post-stream", function () {
|
|||||||
"there are no filters by default"
|
"there are no filters by default"
|
||||||
);
|
);
|
||||||
|
|
||||||
postStream.set("summary", true);
|
postStream.set("filter", "summary");
|
||||||
assert.deepEqual(
|
assert.deepEqual(
|
||||||
postStream.get("streamFilters"),
|
postStream.get("streamFilters"),
|
||||||
{ filter: "summary" },
|
{ filter: "summary" },
|
||||||
|
|||||||
Reference in New Issue
Block a user