Fix back navigation from activity page to cards (#2727)
Three changes needed to support navigating back from a card to the activity page: - Add root_path to the prefer_referrer allowlist on the card show page - Switch event links from HTML target="_top" to data-turbo-frame="_top" so Turbo handles the navigation and turbo:before-visit fires to save the referrer - Normalize trailing slashes in the referrer path comparison so /account_id and /account_id/ both match ref: https://app.fizzy.do/5986089/cards/2390
This commit is contained in:
@@ -24,8 +24,9 @@ export default class extends Controller {
|
|||||||
referrerBackLinkTargetConnected(link) {
|
referrerBackLinkTargetConnected(link) {
|
||||||
if (!this.#referrerUrl || !this.#referrerLabel) { return }
|
if (!this.#referrerUrl || !this.#referrerLabel) { return }
|
||||||
|
|
||||||
const allowedPaths = (link.dataset.turboNavigationAllowedReferrerPaths || "").split(",")
|
const stripTrailingSlash = path => path.replace(/\/$/, "")
|
||||||
const referrerPath = new URL(this.#referrerUrl).pathname
|
const allowedPaths = (link.dataset.turboNavigationAllowedReferrerPaths || "").split(",").map(stripTrailingSlash)
|
||||||
|
const referrerPath = stripTrailingSlash(new URL(this.#referrerUrl).pathname)
|
||||||
if (!allowedPaths.includes(referrerPath)) { return }
|
if (!allowedPaths.includes(referrerPath)) { return }
|
||||||
|
|
||||||
link.href = this.#referrerUrl
|
link.href = this.#referrerUrl
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<% content_for :header do %>
|
<% content_for :header do %>
|
||||||
<div class="header__actions header__actions--start">
|
<div class="header__actions header__actions--start">
|
||||||
<%= link_back_to_board @card.board, prefer_referrer: [ cards_path, board_path(@card.board) ] %>
|
<%= link_back_to_board @card.board, prefer_referrer: [ root_path, cards_path, board_path(@card.board) ] %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
id: dom_id(event, "timelined"),
|
id: dom_id(event, "timelined"),
|
||||||
class: "event event--#{ event.action } #{ "golden-effect" if event.card.golden? } center-block flex flex-column full-width align-start justify-start position-relative",
|
class: "event event--#{ event.action } #{ "golden-effect" if event.card.golden? } center-block flex flex-column full-width align-start justify-start position-relative",
|
||||||
style: "--card-color: #{ card.closed? ? "var(--color-card-complete)" : card.color };",
|
style: "--card-color: #{ card.closed? ? "var(--color-card-complete)" : card.color };",
|
||||||
target: "_top",
|
|
||||||
data: {
|
data: {
|
||||||
|
turbo_frame: "_top",
|
||||||
related_element_target: "related",
|
related_element_target: "related",
|
||||||
related_element_group_value: card.id,
|
related_element_group_value: card.id,
|
||||||
action: "mouseover->related-element#highlight mouseout->related-element#unhighlight" } do %>
|
action: "mouseover->related-element#highlight mouseout->related-element#unhighlight" } do %>
|
||||||
|
|||||||
@@ -26,6 +26,30 @@ class BackLinkNavigationTest < ApplicationSystemTestCase
|
|||||||
assert_current_path filter_url, ignore_query: false
|
assert_current_path filter_url, ignore_query: false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "card back link returns to activity page when navigating from it" do
|
||||||
|
sign_in_as(users(:david))
|
||||||
|
|
||||||
|
assert_text "Layout is broken"
|
||||||
|
click_on "Layout is broken"
|
||||||
|
|
||||||
|
assert_selector "a.btn--back strong", text: "Back to Home"
|
||||||
|
find("a.btn--back").click
|
||||||
|
assert_current_path root_path
|
||||||
|
end
|
||||||
|
|
||||||
|
test "card back link returns to activity page when navigating from it without trailing slash" do
|
||||||
|
sign_in_as(users(:david))
|
||||||
|
|
||||||
|
activity_url_without_trailing_slash = root_url.chomp("/")
|
||||||
|
visit activity_url_without_trailing_slash
|
||||||
|
assert_text "Layout is broken"
|
||||||
|
click_on "Layout is broken"
|
||||||
|
|
||||||
|
assert_selector "a.btn--back strong", text: "Back to Home"
|
||||||
|
find("a.btn--back").click
|
||||||
|
assert_current_path activity_url_without_trailing_slash
|
||||||
|
end
|
||||||
|
|
||||||
test "card back link is not rewritten when navigating from a non-filter page" do
|
test "card back link is not rewritten when navigating from a non-filter page" do
|
||||||
sign_in_as(users(:david))
|
sign_in_as(users(:david))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user