Skip to content

Commit

Permalink
fix(react-router-dom): fix getSearchParamsForLocation in Firefox (#…
Browse files Browse the repository at this point in the history
…10620)

Co-authored-by: Matt Brophy <matt@brophy.org>
  • Loading branch information
smithki and brophdawg11 committed Jul 13, 2023
1 parent 1b8ee16 commit aa65dbd
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
5 changes: 5 additions & 0 deletions .changeset/firefox-addons-and-web-extensions-bug.md
@@ -0,0 +1,5 @@
---
"react-router-dom": patch
---

Fixes an edge-case affecting web extensions in Firefox that use `URLSearchParams` and the `useSearchParams` hook.
1 change: 1 addition & 0 deletions contributors.yml
Expand Up @@ -222,5 +222,6 @@
- yionr
- yuleicul
- zheng-chuang
- smithki
- istarkov
- louis-young
21 changes: 21 additions & 0 deletions packages/react-router-dom/__tests__/search-params-test.tsx
Expand Up @@ -161,4 +161,25 @@ describe("useSearchParams", () => {

expect(node.innerHTML).toMatch(/The current value is ""/);
});

it("returns initial default values in search params", () => {
function SearchPage() {
let [searchParams] = useSearchParams({ a: "1", b: "2" });
return <p>{searchParams.toString()}</p>;
}

act(() => {
ReactDOM.createRoot(node).render(
<MemoryRouter initialEntries={["/search?value=initial"]}>
<Routes>
<Route path="search" element={<SearchPage />} />
</Routes>
</MemoryRouter>
);
});

expect(node.innerHTML).toMatchInlineSnapshot(
`"<p>value=initial&amp;a=1&amp;b=2</p>"`
);
});
});
9 changes: 7 additions & 2 deletions packages/react-router-dom/dom.ts
Expand Up @@ -97,13 +97,18 @@ export function getSearchParamsForLocation(
let searchParams = createSearchParams(locationSearch);

if (defaultSearchParams) {
for (let key of defaultSearchParams.keys()) {
// Use `defaultSearchParams.forEach(...)` here instead of iterating of
// `defaultSearchParams.keys()` to work-around a bug in Firefox related to
// web extensions. Relevant Bugzilla tickets:
// https://bugzilla.mozilla.org/show_bug.cgi?id=1414602
// https://bugzilla.mozilla.org/show_bug.cgi?id=1023984
defaultSearchParams.forEach((_, key) => {
if (!searchParams.has(key)) {
defaultSearchParams.getAll(key).forEach((value) => {
searchParams.append(key, value);
});
}
}
});
}

return searchParams;
Expand Down

0 comments on commit aa65dbd

Please sign in to comment.