diff --git a/app/assets/javascripts/discourse/app/controllers/topic.js b/app/assets/javascripts/discourse/app/controllers/topic.js index 3a097c334ac..d76069ae562 100644 --- a/app/assets/javascripts/discourse/app/controllers/topic.js +++ b/app/assets/javascripts/discourse/app/controllers/topic.js @@ -6,6 +6,7 @@ import discourseComputed, { bind, observes, } from "discourse-common/utils/decorators"; +import { resetCachedTopicList } from "discourse/lib/cached-topic-list"; import { isEmpty, isPresent } from "@ember/utils"; import { next, schedule } from "@ember/runloop"; import discourseLater from "discourse-common/lib/later"; @@ -579,7 +580,10 @@ export default Controller.extend(bufferedProperty("model"), { return; } - const backToInbox = () => this.gotoInbox(topic.get("inboxGroupName")); + const backToInbox = () => { + resetCachedTopicList(this.session); + this.gotoInbox(topic.get("inboxGroupName")); + }; if (topic.get("message_archived")) { topic.moveToInbox().then(backToInbox); diff --git a/app/assets/javascripts/discourse/app/lib/cached-topic-list.js b/app/assets/javascripts/discourse/app/lib/cached-topic-list.js index 38148314d3c..1cf2000a7f9 100644 --- a/app/assets/javascripts/discourse/app/lib/cached-topic-list.js +++ b/app/assets/javascripts/discourse/app/lib/cached-topic-list.js @@ -1,13 +1,25 @@ +export function setCachedTopicList(session, topicList) { + session.set("topicList", topicList); +} + +export function getCachedTopicList(session) { + session.get("topicList"); +} + +export function resetCachedTopicList(session) { + session.setProperties({ + topicList: null, + topicListScrollPosition: null, + }); +} + export function findOrResetCachedTopicList(session, filter) { const lastTopicList = session.get("topicList"); if (lastTopicList && lastTopicList.filter === filter) { return lastTopicList; } else { - session.setProperties({ - topicList: null, - topicListScrollPosition: null, - }); + resetCachedTopicList(session); return false; } } diff --git a/app/assets/javascripts/discourse/tests/acceptance/personal-message-test.js b/app/assets/javascripts/discourse/tests/acceptance/personal-message-test.js index 8504fc1a47e..bb0c704fc98 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/personal-message-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/personal-message-test.js @@ -1,4 +1,4 @@ -import { click, visit } from "@ember/test-helpers"; +import { click, currentURL, visit } from "@ember/test-helpers"; import DiscourseURL from "discourse/lib/url"; import { acceptance, @@ -8,6 +8,11 @@ import { import I18n from "I18n"; import { test } from "qunit"; import sinon from "sinon"; +import { + getCachedTopicList, + setCachedTopicList, +} from "discourse/lib/cached-topic-list"; +import { getOwner } from "discourse-common/lib/get-owner"; acceptance("Personal Message", function (needs) { needs.user(); @@ -20,6 +25,17 @@ acceptance("Personal Message", function (needs) { I18n.t("suggested_topics.pm_title") ); }); + + test("redirects to inbox after topic is archived and clears topicList cache", async function (assert) { + const session = getOwner(this).lookup("service:session"); + setCachedTopicList(session, {}); + + await visit("/t/pm-for-testing/12"); + await click(".archive-topic"); + + assert.strictEqual(currentURL(), "/u/eviltrout/messages"); + assert.notOk(getCachedTopicList(session), "topic list cached is cleared"); + }); }); acceptance("Personal Message (regular user)", function (needs) {