UNPKG

1.29 kBPlain TextView Raw
1import Navigo from 'navigo';
2
3export const NAVIGO: Navigo = new Navigo('/', {
4 hash: true,
5});
6
7export interface Route {
8 component?: Object;
9 template?: string;
10 url: string;
11}
12
13export class RouterService {
14 private static readonly subscribers: Function[] = [];
15
16 private constructor() {}
17
18 private static notify(
19 route: Route,
20 data: {
21 [key: string]: string;
22 } | null
23 ): void {
24 RouterService.subscribers.forEach((subscriber: Function) => {
25 subscriber(route, data);
26 });
27 }
28
29 public static register(routes: Route[]): void {
30 routes.forEach((route: Route) => {
31 NAVIGO.on(route.url, ({ data }) => {
32 RouterService.notify(route, data);
33 });
34 });
35 // eslint-disable-next-line @typescript-eslint/no-unsafe-call
36 NAVIGO.resolve();
37 }
38
39 public static navigate(route: string): void {
40 NAVIGO.navigate(route);
41 }
42
43 public static subscribe(subscriber: Function): void {
44 if (subscriber instanceof Function) {
45 this.subscribers.push(subscriber);
46 } else {
47 throw new Error(`The subscriber is not a Function!`);
48 }
49 }
50
51 public static unsubscribe(subscriber: Function): void {
52 const index = this.subscribers.indexOf(subscriber);
53 if (index >= 0) {
54 this.subscribers.splice(index, 1);
55 }
56 }
57}