/
app-router.ts
65 lines (55 loc) · 1.8 KB
/
app-router.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { get, writable } from 'svelte/store'
import { profiles } from '@core/profile'
import { IRouterEvent, Router } from '@core/router'
import { AppRoute, LoginRoute } from './enums'
import { loginRoute } from './subrouters'
export const appRoute = writable<AppRoute>(null)
export const appRouter = writable<AppRouter>(null)
export class AppRouter extends Router<AppRoute> {
constructor() {
super(AppRoute.Onboarding, appRoute)
this.init()
}
public init(): void {
const hasCompletedOnboarding = get(profiles)?.length > 0
this.routeStore.set(hasCompletedOnboarding ? AppRoute.Login : AppRoute.Onboarding)
}
public reset(): void {
this.history = []
this.init()
}
public next(event?: IRouterEvent): void {
const params = event || {}
let nextRoute: AppRoute
const currentRoute = get(this.routeStore)
switch (currentRoute) {
case AppRoute.Login: {
if (params.shouldAddProfile) {
nextRoute = AppRoute.Onboarding
} else {
nextRoute = AppRoute.Dashboard
}
break
}
case AppRoute.Dashboard: {
if (params.reset) {
nextRoute = AppRoute.Login
}
break
}
case AppRoute.Onboarding: {
if (params.shouldAddProfile) {
nextRoute = AppRoute.Onboarding
} else {
loginRoute.set(LoginRoute.LoadProfile)
nextRoute = AppRoute.Login
}
break
}
}
this.setNext(nextRoute)
}
public forceNextRoute(route: AppRoute): void {
this.setNext(route)
}
}