import * as router from 'lib/router' // Model export type Route = | Login | Maps | Map; type Login = { state: 'login' } export const login: Login = { state: 'login' } type Maps = { state: 'maps' } export const maps: Maps = { state: 'maps' } type Map = { state: 'map', id: string } export function map({ id }: { id: string }): Map { return { state: 'map', id } } // Serialization export function get(url: string): Route | undefined { let res; if (url == '/login') { return { state: 'login' } } else if (url == '/') { return { state: 'maps' } } else if (res = router.matches(url, '/:id')) { return { state: 'map', id: res.data['id'] } } } export function toString(route: Route): string { if (route.state == 'login') return '/login' else if (route.state == 'map') return `/${route.id}` else return '/' } // History export function push(route: Route): void { history.pushState({}, '', toString(route)) // Trigger pop state const popStateEvent = new PopStateEvent('popstate', {}) dispatchEvent(popStateEvent) }