mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[IMP] router: implement redirect feature
This commit is contained in:
@@ -68,9 +68,9 @@ export class Router {
|
|||||||
QWeb.addDirective(makeDirective(<RouterEnv>env));
|
QWeb.addDirective(makeDirective(<RouterEnv>env));
|
||||||
}
|
}
|
||||||
|
|
||||||
navigate(dest: Destination): void {
|
navigate(to: Destination): void {
|
||||||
const to = this.destToUrl(dest);
|
const url = this.destToUrl(to);
|
||||||
history.pushState({}, to, location.origin + to);
|
history.pushState({}, url, location.origin + url);
|
||||||
this.checkAndUpdateRoute();
|
this.checkAndUpdateRoute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,6 +107,11 @@ export class Router {
|
|||||||
let route = this.routes[routeId];
|
let route = this.routes[routeId];
|
||||||
let params = this.matchRoute(route.path, currentPath);
|
let params = this.matchRoute(route.path, currentPath);
|
||||||
if (params) {
|
if (params) {
|
||||||
|
if (route.redirect) {
|
||||||
|
this.navigate(route.redirect);
|
||||||
|
this.checkRoute();
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.currentRoute = route;
|
this.currentRoute = route;
|
||||||
this.currentParams = params;
|
this.currentParams = params;
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -71,3 +71,27 @@ describe("match routes", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("redirect", () => {
|
||||||
|
test("can redirect to other route", () => {
|
||||||
|
router = new TestRouter(env, [
|
||||||
|
{ name: "routea", path: "/some/path" },
|
||||||
|
{ name: "routeb", path: "/some/other/path", redirect: { name: "routea" } }
|
||||||
|
]);
|
||||||
|
|
||||||
|
router.navigate({ name: "routeb" });
|
||||||
|
expect(window.location.pathname).toBe("/some/path");
|
||||||
|
expect(router.currentRouteName).toBe("routea");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("can redirect to other path", () => {
|
||||||
|
router = new TestRouter(env, [
|
||||||
|
{ name: "routea", path: "/some/path" },
|
||||||
|
{ name: "routeb", path: "/some/other/path", redirect: { path: "/some/path" } }
|
||||||
|
]);
|
||||||
|
|
||||||
|
router.navigate({ name: "routeb" });
|
||||||
|
expect(window.location.pathname).toBe("/some/path");
|
||||||
|
expect(router.currentRouteName).toBe("routea");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user