From e7a2c7a623bcce565fc51706ddc5a11b96a7c239 Mon Sep 17 00:00:00 2001 From: Bruno Prieto Date: Mon, 27 Nov 2023 00:27:42 -0300 Subject: [PATCH] Page refreshes: Use pathname instead of href to detect if locations are equal Before this commit, URLs had to be exactly the same for the possibility of a refresh with morphing. Now, it only checks that the paths are equal, regardless of whether they have different search params. --- src/core/drive/page_view.js | 2 +- src/tests/fixtures/page_refresh.html | 1 + src/tests/functional/page_refresh_tests.js | 7 +++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/core/drive/page_view.js b/src/core/drive/page_view.js index 19d8a244b..6e61c36c3 100644 --- a/src/core/drive/page_view.js +++ b/src/core/drive/page_view.js @@ -56,7 +56,7 @@ export class PageView extends View { } isPageRefresh(visit) { - return !visit || (this.lastRenderedLocation.href === visit.location.href && visit.action === "replace") + return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === "replace") } get snapshot() { diff --git a/src/tests/fixtures/page_refresh.html b/src/tests/fixtures/page_refresh.html index 59463ae90..0020ed480 100644 --- a/src/tests/fixtures/page_refresh.html +++ b/src/tests/fixtures/page_refresh.html @@ -44,6 +44,7 @@

Frame to be preserved

Element with Stimulus controller

+

Link with params to refresh the page

Link to another page

diff --git a/src/tests/functional/page_refresh_tests.js b/src/tests/functional/page_refresh_tests.js index 53c4de98b..8e3e4ef13 100644 --- a/src/tests/functional/page_refresh_tests.js +++ b/src/tests/functional/page_refresh_tests.js @@ -17,6 +17,13 @@ test("renders a page refresh with morphing", async ({ page }) => { await nextEventNamed(page, "turbo:render", { renderMethod: "morph" }) }) +test("renders a page refresh with morphing when the paths are the same but search params are diferent", async ({ page }) => { + await page.goto("/src/tests/fixtures/page_refresh.html") + + await page.click("#replace-link") + await nextEventNamed(page, "turbo:render", { renderMethod: "morph" }) +}) + test("doesn't morph when the turbo-refresh-method meta tag is not 'morph'", async ({ page }) => { await page.goto("/src/tests/fixtures/page_refresh_replace.html")