From da5e9af10a049570347a2279a3b3b11277f1afae Mon Sep 17 00:00:00 2001 From: Mark VanLandingham Date: Thu, 24 Oct 2019 09:27:03 -0500 Subject: [PATCH] FEATURE: Add remembering topic list for group pms (#8235) * FEATURE: Add remembering topic list for group pms * added findOrResetCachedBy helper in topic-list * Created cached-topic-list.js * Update app/assets/javascripts/discourse/routes/build-private-messages-route.js.es6 Co-Authored-By: Robin Ward --- .../discourse/lib/cached-topic-list.js.es6 | 12 ++++++++++++ .../routes/build-private-messages-route.js.es6 | 16 ++++------------ .../user-private-messages-group-archive.js.es6 | 8 +++++--- .../routes/user-private-messages-group.js.es6 | 8 +++++--- 4 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 app/assets/javascripts/discourse/lib/cached-topic-list.js.es6 diff --git a/app/assets/javascripts/discourse/lib/cached-topic-list.js.es6 b/app/assets/javascripts/discourse/lib/cached-topic-list.js.es6 new file mode 100644 index 00000000000..78cd2c0c515 --- /dev/null +++ b/app/assets/javascripts/discourse/lib/cached-topic-list.js.es6 @@ -0,0 +1,12 @@ +export function findOrResetCachedTopicList(session, filter) { + const lastTopicList = session.get("topicList"); + if (lastTopicList && lastTopicList.filter === filter) { + return lastTopicList; + } else { + session.setProperties({ + topicList: null, + topicListScrollPosition: null + }); + return false; + } +} diff --git a/app/assets/javascripts/discourse/routes/build-private-messages-route.js.es6 b/app/assets/javascripts/discourse/routes/build-private-messages-route.js.es6 index 820a41cf8d7..751e8f8fd2a 100644 --- a/app/assets/javascripts/discourse/routes/build-private-messages-route.js.es6 +++ b/app/assets/javascripts/discourse/routes/build-private-messages-route.js.es6 @@ -1,4 +1,5 @@ import UserTopicListRoute from "discourse/routes/user-topic-list"; +import { findOrResetCachedTopicList } from "discourse/lib/cached-topic-list"; // A helper to build a user topic list route export default (viewName, path, channel) => { @@ -18,19 +19,10 @@ export default (viewName, path, channel) => { }, model() { - const session = Discourse.Session.current(); - let filter = + const filter = "topics/" + path + "/" + this.modelFor("user").get("username_lower"); - let lastTopicList = session.get("topicList"); - if (lastTopicList && lastTopicList.filter === filter) { - return lastTopicList; - } else { - session.setProperties({ - topicList: null, - topicListScrollPosition: null - }); - return this.store.findFiltered("topicList", { filter }); - } + const lastTopicList = findOrResetCachedTopicList(this.session, filter); + return lastTopicList ? lastTopicList : this.store.findFiltered("topicList", { filter }); }, setupController() { diff --git a/app/assets/javascripts/discourse/routes/user-private-messages-group-archive.js.es6 b/app/assets/javascripts/discourse/routes/user-private-messages-group-archive.js.es6 index 0d37dac9235..b8ae1b05816 100644 --- a/app/assets/javascripts/discourse/routes/user-private-messages-group-archive.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-private-messages-group-archive.js.es6 @@ -1,4 +1,5 @@ import createPMRoute from "discourse/routes/build-private-messages-route"; +import { findOrResetCachedTopicList } from "discourse/lib/cached-topic-list"; export default createPMRoute("groups", "private-messages-groups").extend({ groupName: null, @@ -16,9 +17,10 @@ export default createPMRoute("groups", "private-messages-groups").extend({ model(params) { const username = this.modelFor("user").get("username_lower"); - return this.store.findFiltered("topicList", { - filter: `topics/private-messages-group/${username}/${params.name}/archive` - }); + const filter = + `topics/private-messages-group/${username}/${params.name}/archive`; + const lastTopicList = findOrResetCachedTopicList(this.session, filter); + return lastTopicList ? lastTopicList : this.store.findFiltered("topicList", { filter }); }, afterModel(model) { diff --git a/app/assets/javascripts/discourse/routes/user-private-messages-group.js.es6 b/app/assets/javascripts/discourse/routes/user-private-messages-group.js.es6 index cea1b022f41..5cb253c3b16 100644 --- a/app/assets/javascripts/discourse/routes/user-private-messages-group.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-private-messages-group.js.es6 @@ -1,4 +1,5 @@ import createPMRoute from "discourse/routes/build-private-messages-route"; +import { findOrResetCachedTopicList } from "discourse/lib/cached-topic-list"; export default createPMRoute("groups", "private-messages-groups").extend({ groupName: null, @@ -11,9 +12,10 @@ export default createPMRoute("groups", "private-messages-groups").extend({ model(params) { const username = this.modelFor("user").get("username_lower"); - return this.store.findFiltered("topicList", { - filter: `topics/private-messages-group/${username}/${params.name}` - }); + const filter = + `topics/private-messages-group/${username}/${params.name}`; + const lastTopicList = findOrResetCachedTopicList(this.session, filter); + return lastTopicList ? lastTopicList : this.store.findFiltered("topicList", { filter }); }, afterModel(model) {