FIX: Only use lastViewedTopic when going 'back' to a topic list (#22594)

Using the lastViewedTopicId indiscriminately can cause strange scrolling behavior when navigating to a **different** topic list after viewing a topic. We only want to refocus the topic when going 'back' to the same topic list which originally triggered the navigation.
This commit is contained in:
David Taylor
2023-07-13 15:23:36 +01:00
committed by GitHub
parent 9c915345ea
commit 30c152c5a7
5 changed files with 60 additions and 30 deletions

View File

@@ -34,6 +34,10 @@ module PageObjects
find("#{TOPIC_LIST_BODY_SELECTOR} a", text: title).click
end
def visit_topic(topic)
find("#{topic_list_item_class(topic)} a.raw-topic-link").click
end
private
def topic_list_item_class(topic)

View File

@@ -0,0 +1,40 @@
# frozen_string_literal: true
describe "Topic list focus", type: :system do
let!(:topics) { Fabricate.times(10, :post).map(&:topic) }
before { Fabricate(:admin) }
let(:discovery) { PageObjects::Pages::Discovery.new }
let(:topic) { PageObjects::Pages::Topic.new }
def focussed_topic_id
page.evaluate_script(
"document.activeElement.closest('.topic-list-item')?.dataset.topicId",
)&.to_i
end
it "refocusses last clicked topic when going back to topic list" do
visit("/")
expect(page).to have_css("body.navigation-topics")
expect(discovery.topic_list).to have_topics
# Click a topic
discovery.topic_list.visit_topic(topics[5])
expect(topic).to have_topic_title(topics[5].title)
# Going back to the topic-list should re-focus
page.go_back
expect(page).to have_css("body.navigation-topics")
expect(focussed_topic_id).to eq(topics[5].id)
# Click topic again
discovery.topic_list.visit_topic(topics[5])
expect(topic).to have_topic_title(topics[5].title)
# Visiting a topic list another way should not focus
find(".sidebar-section-link[data-link-name='everything']").click
expect(page).to have_css("body.navigation-topics")
expect(focussed_topic_id).to eq(nil)
end
end