[IMP] router: implement redirect feature

This commit is contained in:
Géry Debongnie
2019-07-26 08:22:31 +02:00
parent bf705fcd99
commit 1a931a2a08
2 changed files with 32 additions and 3 deletions
+8 -3
View File
@@ -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;
+24
View File
@@ -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");
});
});