Skip to content

Commit

Permalink
support arrays in search params tweaks
Browse files Browse the repository at this point in the history
  • Loading branch information
ryansolid committed Oct 18, 2024
1 parent f586b1b commit 18b9b52
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 9 deletions.
5 changes: 5 additions & 0 deletions .changeset/fresh-wasps-explode.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/router": patch
---

Support arrays in Search Params
4 changes: 2 additions & 2 deletions src/routing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ export function getRouteMatches(branches: Branch[], location: string): RouteMatc
function createLocation(
path: Accessor<string>,
state: Accessor<any>,
queryWrapper?: (getQuery: () => Params) => Params
queryWrapper?: (getQuery: () => SearchParams) => SearchParams
): Location {
const origin = new URL(mockBase);
const url = createMemo<URL>(
Expand All @@ -254,7 +254,7 @@ function createLocation(
const search = createMemo(() => url().search, true);
const hash = createMemo(() => url().hash);
const key = () => "";
const queryFn = on(search, () => extractSearchParams(url())) as () => Params;
const queryFn = on(search, () => extractSearchParams(url())) as () => SearchParams;

return {
get pathname() {
Expand Down
2 changes: 1 addition & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ export interface RouterUtils {
go(delta: number): void;
beforeLeave: BeforeLeaveLifecycle;
paramsWrapper: (getParams: () => Params, branches: () => Branch[]) => Params;
queryWrapper: (getQuery: () => Params) => Params;
queryWrapper: (getQuery: () => SearchParams) => SearchParams;
}

export interface RouterContext {
Expand Down
9 changes: 3 additions & 6 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,9 @@ export function extractSearchParams(url: URL): SearchParams {
const params: SearchParams = {};
url.searchParams.forEach((value, key) => {
if (key in params) {
params[key] = Array.isArray(params[key])
? ([...params[key], value] as string[])
: ([params[key], value] as string[]);
} else {
params[key] = value;
}
if (Array.isArray(params[key])) (params[key] as string[]).push(value);
else params[key] = [params[key] as string, value];
} else params[key] = value;
});
return params;
}
Expand Down

0 comments on commit 18b9b52

Please sign in to comment.