Skip to content

Commit

Permalink
Do not include default query params in href (#138)
Browse files Browse the repository at this point in the history
  • Loading branch information
garronej authored Dec 9, 2023
1 parent d1f9a3f commit e9b6b7b
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 20 deletions.
54 changes: 35 additions & 19 deletions src/createLocation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,29 +48,45 @@ export function createLocation({
const urlEncode =
paramDef["~internal"].valueSerializer.urlEncode ?? urlEncodeDefault;

let value: string | null;

if (paramDef["~internal"].array) {
if (!Array.isArray(paramValue)) {
if (__DEV__) {
throw TypeRouteError.Expected_type_does_not_match_actual_type.create({
context: "routes[routeName](...)",
actualType: typeOf(paramValue),
expectedType: "array",
value: paramValue,
valueName: paramName,
});
const getValue = (paramValue: unknown) => {

let value: string | null;

if (paramDef["~internal"].array) {
if (!Array.isArray(paramValue)) {
if (__DEV__) {
throw TypeRouteError.Expected_type_does_not_match_actual_type.create({
context: "routes[routeName](...)",
actualType: typeOf(paramValue),
expectedType: "array",
value: paramValue,
valueName: paramName,
});
}
}
}

value =
(paramValue as unknown[]).length === 0
? null
: (paramValue as unknown[])
value =
(paramValue as unknown[]).length === 0
? null
: (paramValue as unknown[])
.map((part) => stringify(paramDef, part, urlEncode))
.join(arraySeparator);
} else {
value = stringify(paramDef, paramValue, urlEncode);
} else {
value = stringify(paramDef, paramValue, urlEncode);
}

return value;

};

const value = getValue(paramValue);

if (
paramDef["~internal"].kind === "query" &&
paramDef["~internal"].default !== undefined &&
getValue(paramDef["~internal"].default) === value
) {
continue;
}

params[paramDef["~internal"].kind][paramName] = {
Expand Down
34 changes: 33 additions & 1 deletion test/createRouter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,7 @@ describe("createRouter", () => {
expect(route.href).toBe("/foo");

routes.bar({ page: 1 }).push();
expect(route.href).toBe("/bar?page=1");
expect(route.href).toBe("/bar");
session.replace("/bar?page=2");
expect(route.href).toBe("/bar?page=2");
session.back();
Expand All @@ -537,6 +537,38 @@ describe("createRouter", () => {
expect(route.href).toBe("/bar?page=2");
});


it("should not include default query params in href", () => {
const { routes, session } = createRouter(
{
session: {
type: "memory",
initialEntries: ["/foo"],
},
},
{
foo: defineRoute("/foo"),
bar: defineRoute(
{ page: param.query.optional.number.default(1) },
() => "/bar"
),
}
);

let route = session.getInitialRoute();

session.listen((nextRoute) => (route = nextRoute));

expect(route.href).toBe("/foo");

routes.bar({ page: 1 }).push();
expect(route.href).toBe("/bar");

routes.bar({ page: 2 }).push();
expect(route.href).toBe("/bar?page=2");

});

it("should handle redirect for initial route", () => {
const { session } = createRouter(
{
Expand Down

0 comments on commit e9b6b7b

Please sign in to comment.