diff --git a/app/assets/javascripts/discourse/app/lib/homepage-router-overrides.js b/app/assets/javascripts/discourse/app/lib/homepage-router-overrides.js index 7e5db91c3bb..d8a0def3d53 100644 --- a/app/assets/javascripts/discourse/app/lib/homepage-router-overrides.js +++ b/app/assets/javascripts/discourse/app/lib/homepage-router-overrides.js @@ -21,12 +21,14 @@ export default function applyRouterHomepageOverrides(router) { } } +const homepageRewriteParam = "_discourse_homepage_rewrite"; + /** * Returns a magic URL which `discovery-index` will redirect to. * We watch for this, and then perform the rewrite in the router. */ export function homepageDestination() { - return `/${defaultHomepage()}?_discourse_homepage_rewrite=1`; + return `/${defaultHomepage()}?${homepageRewriteParam}=1`; } function rewriteIfNeeded(url, transition) { @@ -34,12 +36,16 @@ function rewriteIfNeeded(url, transition) { if ( intentUrl?.startsWith(homepageDestination()) || (transition?.intent.name === `discovery.${defaultHomepage()}` && - transition?.intent.queryParams["_discourse_homepage_rewrite"]) + transition?.intent.queryParams[homepageRewriteParam]) ) { - const params = url.split("?", 2)[1]; + const params = (intentUrl || url).split("?", 2)[1]; url = "/"; if (params) { - url += `?${params}`; + const searchParams = new URLSearchParams(params); + searchParams.delete(homepageRewriteParam); + if (searchParams.size) { + url += `?${searchParams.toString()}`; + } } } return url; diff --git a/app/assets/javascripts/discourse/tests/acceptance/homepage-test.js b/app/assets/javascripts/discourse/tests/acceptance/homepage-test.js index 3229a0413b1..621f1642e2a 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/homepage-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/homepage-test.js @@ -74,4 +74,18 @@ acceptance("Dynamic homepage handling", function () { await click(".nav-item_categories a"); assertOnCategories("/categories"); }); + + test("it passes query params through", async function (assert) { + await visit("/?test-one=true"); + + const router = getOwner(this).lookup("service:router"); + assert.strictEqual(router.currentURL, "/?test-one=true"); + }); + + test("it removes the _discourse_homepage_rewrite param from the URL", async function (assert) { + await visit("/?_discourse_homepage_rewrite=1&test-one=true"); + + const router = getOwner(this).lookup("service:router"); + assert.strictEqual(router.currentURL, "/?test-one=true"); + }); });