[IMP] router: allow query string in paths

This commit is contained in:
Russell Briggs
2021-07-05 20:45:16 +01:00
committed by Géry Debongnie
parent a1552117f9
commit f0b75b6890
2 changed files with 19 additions and 1 deletions
+7 -1
View File
@@ -125,7 +125,10 @@ export class Router {
const initialParams = this.currentParams;
const result = await this.matchAndApplyRules(path);
if (result.type === "match") {
const finalPath = this.routeToPath(result.route, result.params);
let finalPath = this.routeToPath(result.route, result.params);
if (path.indexOf("?") > -1) {
finalPath += "?" + path.split("?")[1];
}
const isPopStateEvent = ev && ev instanceof PopStateEvent;
if (!isPopStateEvent) {
this.setUrlFromPath(finalPath);
@@ -239,6 +242,9 @@ export class Router {
if (route.path === "*") {
return {};
}
if (path.indexOf("?") > -1) {
path = path.split("?")[0];
}
if (path.startsWith("#")) {
path = path.slice(1);
}
+12
View File
@@ -60,6 +60,13 @@ describe("router miscellaneous", () => {
await router.navigate({ to: "users", params: { id: 3 } });
expect(window.location.href).toBe("http://localhost/test.html#/users/3");
});
test("navigate using path and query string should preserve query string", async () => {
router = new TestRouter(env, [{ name: "users", path: "/users/{{id}}" }]);
await router.navigate({ path: "/users/3?test=1" });
expect(window.location.pathname).toBe("/users/3");
expect(window.location.search).toBe("?test=1");
});
});
describe("routeToPath", () => {
@@ -117,6 +124,11 @@ describe("getRouteParams", () => {
expect(getRouteParams({ path: "*" }, "somepath")).toEqual({});
});
test("properly match routes with query params", () => {
expect(getRouteParams({ path: "/home" }, "/home?test=1")).toEqual({});
expect(getRouteParams({ path: "/home" }, "/home?test1=1&test2=2")).toEqual({});
});
test("properly match simple routes, mode hash", () => {
// simple route
expect(getRouteParams({ path: "/home" }, "#/home")).toEqual({});