From c3fa3042dce5ea267b10a92858b5ffae4b17768b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Sat, 26 Jan 2019 18:12:54 +0100 Subject: [PATCH] add IRouter interface --- web/static/src/ts/core/event_bus.ts | 2 +- web/static/src/ts/env.ts | 4 ++-- web/static/src/ts/services/action_manager.ts | 6 +++--- web/static/src/ts/services/router.ts | 13 +++++++++++-- web/static/src/ts/widgets/Discuss.ts | 1 + 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/web/static/src/ts/core/event_bus.ts b/web/static/src/ts/core/event_bus.ts index 6fa23136..bf2c316f 100644 --- a/web/static/src/ts/core/event_bus.ts +++ b/web/static/src/ts/core/event_bus.ts @@ -1,4 +1,4 @@ -type Callback = (...args: any[]) => void; +export type Callback = (...args: any[]) => void; interface Subscription { owner: any; diff --git a/web/static/src/ts/env.ts b/web/static/src/ts/env.ts index 082e1455..19d74907 100644 --- a/web/static/src/ts/env.ts +++ b/web/static/src/ts/env.ts @@ -3,7 +3,7 @@ import { idGenerator } from "./core/utils"; import { WEnv } from "./core/widget"; import { ActionManager } from "./services/action_manager"; import { Ajax } from "./services/ajax"; -import { Router } from "./services/router"; +import { Router, IRouter } from "./services/router"; export interface Menu { title: string; @@ -13,7 +13,7 @@ export interface Menu { export interface Env extends WEnv { actionManager: ActionManager; ajax: Ajax; - router: Router; + router: IRouter; menus: Menu[]; } diff --git a/web/static/src/ts/services/action_manager.ts b/web/static/src/ts/services/action_manager.ts index 8618d9c7..1d682917 100644 --- a/web/static/src/ts/services/action_manager.ts +++ b/web/static/src/ts/services/action_manager.ts @@ -3,7 +3,7 @@ import { Widget } from "../core/widget"; import { Env } from "../env"; import { CRM } from "../widgets/crm"; import { Discuss } from "../widgets/discuss"; -import { Query, Router } from "./router"; +import { Query, IRouter } from "./router"; interface Type extends Function { new (...args: any[]): T; @@ -33,10 +33,10 @@ const actions: any[] = [ ]; export class ActionManager extends EventBus { - router: Router; + router: IRouter; currentAction: ActionWidget | null = null; - constructor(router: Router) { + constructor(router: IRouter) { super(); this.router = router; const query = this.router.getQuery(); diff --git a/web/static/src/ts/services/router.ts b/web/static/src/ts/services/router.ts index e6686f64..9f554cca 100644 --- a/web/static/src/ts/services/router.ts +++ b/web/static/src/ts/services/router.ts @@ -1,4 +1,4 @@ -import { EventBus } from "../core/event_bus"; +import { EventBus, Callback } from "../core/event_bus"; export type Query = { [key: string]: string }; @@ -6,7 +6,16 @@ function clearSlashes(s: string): string { return s.replace(/\/$/, "").replace(/^\//, ""); } -export class Router extends EventBus { +type RouterEvent = "query_changed"; + +export interface IRouter { + navigate(query: Query); + on(event: RouterEvent, owner: any, callback: Callback); + getQuery(): Query; + formatURL(path: string, query: Query): string; +} + +export class Router extends EventBus implements IRouter { currentQuery: Query; constructor() { diff --git a/web/static/src/ts/widgets/Discuss.ts b/web/static/src/ts/widgets/Discuss.ts index 747e748e..26b8e316 100644 --- a/web/static/src/ts/widgets/Discuss.ts +++ b/web/static/src/ts/widgets/Discuss.ts @@ -9,6 +9,7 @@ const template = ` +