UNPKG

@exlinep/router

Version:
134 lines (110 loc) 3.57 kB
/** * Эти функции будут работать после вызова {@link setGlobalRouter} * @packageDocumentation */ import { RouteList, Router } from './entities/Router'; import { Route } from './entities/Route'; import { RouterConfig } from './entities/RouterConfig'; import { __testResetHistoryUniqueId } from './entities/State'; import { PageParams } from './entities/Types'; let globalRouter: Router | null = null; /** * @ignore * @param routes * @param config */ export function startGlobalRouter(routes: RouteList, config: RouterConfig | null = null): Router { if (globalRouter) { throw new Error('startGlobalRouter called twice is not allowed'); } globalRouter = new Router(routes, config); globalRouter.start(); return globalRouter; } export function getGlobalRouter(): Router { if (!globalRouter) { throw new Error('getGlobalRouter called before startGlobalRouter'); } return globalRouter; } export function setGlobalRouter(router: Router) { globalRouter = router; } /** * @ignore */ export function dangerousResetGlobalRouterUseForTestOnly() { if (globalRouter) { globalRouter.stop(); window.history.pushState(null, '', ''); } if (window.history.state) { window.history.pushState(null, '', ''); } __testResetHistoryUniqueId(); globalRouter = null; } export function pushPage(pageId: string, params: PageParams = {}) { return getGlobalRouter().pushPage(pageId, params); } export function replacePage(pageId: string, params: PageParams = {}) { return getGlobalRouter().replacePage(pageId, params); } export function popPage() { return getGlobalRouter().popPage(); } export function pushModal(modalId: string, params: PageParams = {}) { return getGlobalRouter().pushModal(modalId, params); } export function pushPopup(popupId: string, params: PageParams = {}) { return getGlobalRouter().pushPopup(popupId, params); } export function replaceModal(modalId: string, params: PageParams = {}) { return getGlobalRouter().replaceModal(modalId, params); } export function replacePopout(popupId: string, params: PageParams = {}) { return getGlobalRouter().replacePopup(popupId, params); } export function popPageTo(x: number|string) { return getGlobalRouter().popPageTo(x); } /** * @deprecated use popPageIfHasOverlay */ export function popPageIfModalOrPopup() { return getGlobalRouter().popPageIfModalOrPopup(); } export function popPageIfHasOverlay() { return getGlobalRouter().popPageIfHasOverlay(); } export function pushPageAfterPreviews(prevPageId: string, pageId: string, params: PageParams = {}) { return getGlobalRouter().pushPageAfterPreviews(prevPageId, pageId, params); } /** * @deprecated getCurrentStateOrDef * @ignore */ export function getCurrentRouterState() { return getCurrentStateOrDef(); } export function getCurrentStateOrDef() { return getGlobalRouter().getCurrentStateOrDef(); } /** * @deprecated getCurrentRouteOrDef * @ignore */ export function getCurrentRoute(): Route { return getCurrentRouteOrDef(); } export function getCurrentRouteOrDef() { return getGlobalRouter().getCurrentRouteOrDef(); } export function isInfinityPanel(panelId: string): boolean { // see Route.getPanelId return !!panelId && panelId.startsWith('_'); } export function getInfinityPanelId(panelId: string) { // see Route.getPanelId return (panelId.split('..').shift() || '').replace('_', ''); }