mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[IMP] router: allow query string in paths
This commit is contained in:
committed by
Géry Debongnie
parent
a1552117f9
commit
f0b75b6890
@@ -125,7 +125,10 @@ export class Router {
|
|||||||
const initialParams = this.currentParams;
|
const initialParams = this.currentParams;
|
||||||
const result = await this.matchAndApplyRules(path);
|
const result = await this.matchAndApplyRules(path);
|
||||||
if (result.type === "match") {
|
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;
|
const isPopStateEvent = ev && ev instanceof PopStateEvent;
|
||||||
if (!isPopStateEvent) {
|
if (!isPopStateEvent) {
|
||||||
this.setUrlFromPath(finalPath);
|
this.setUrlFromPath(finalPath);
|
||||||
@@ -239,6 +242,9 @@ export class Router {
|
|||||||
if (route.path === "*") {
|
if (route.path === "*") {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
if (path.indexOf("?") > -1) {
|
||||||
|
path = path.split("?")[0];
|
||||||
|
}
|
||||||
if (path.startsWith("#")) {
|
if (path.startsWith("#")) {
|
||||||
path = path.slice(1);
|
path = path.slice(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,6 +60,13 @@ describe("router miscellaneous", () => {
|
|||||||
await router.navigate({ to: "users", params: { id: 3 } });
|
await router.navigate({ to: "users", params: { id: 3 } });
|
||||||
expect(window.location.href).toBe("http://localhost/test.html#/users/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", () => {
|
describe("routeToPath", () => {
|
||||||
@@ -117,6 +124,11 @@ describe("getRouteParams", () => {
|
|||||||
expect(getRouteParams({ path: "*" }, "somepath")).toEqual({});
|
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", () => {
|
test("properly match simple routes, mode hash", () => {
|
||||||
// simple route
|
// simple route
|
||||||
expect(getRouteParams({ path: "/home" }, "#/home")).toEqual({});
|
expect(getRouteParams({ path: "/home" }, "#/home")).toEqual({});
|
||||||
|
|||||||
Reference in New Issue
Block a user