diff --git a/src/routerModule/router.service.spec.ts b/src/routerModule/router.service.spec.ts index ef6505f89bef4d10355fe8c817c61fdd9ec3c17f..f389f56d2c428eacf7549a3af4ffcd75956fa179 100644 --- a/src/routerModule/router.service.spec.ts +++ b/src/routerModule/router.service.spec.ts @@ -137,23 +137,29 @@ describe('> router.service.ts', () => { router = TestBed.inject(Router) router.navigate(['foo', 'bar']) - TestBed.inject(RouterService) + const service = TestBed.inject(RouterService) tick() expect(cvtFullRouteToStateSpy).toHaveBeenCalledWith( - router.parseUrl('/foo/bar'), {} + router.parseUrl('/foo/bar'), {}, service['logError'] ) discardPeriodicTasks() })) - it('> calls cvtStateToHashedRoutes with returned states', fakeAsync(() => { + it('> calls cvtStateToHashedRoutes with current state', fakeAsync(() => { const fakeParsedState = { bizz: 'buzz' } + const fakeState = { + foo: 'bar' + } cvtFullRouteToStateSpy.and.callFake(() => fakeParsedState) + const store = TestBed.inject(MockStore) + store.setState(fakeState) + cvtStateToHashedRoutesSpy.and.callFake(() => { return ['bizz', 'buzz'] }) @@ -164,7 +170,7 @@ describe('> router.service.ts', () => { tick() - expect(cvtStateToHashedRoutesSpy).toHaveBeenCalledWith(fakeParsedState) + expect(cvtStateToHashedRoutesSpy).toHaveBeenCalledWith(fakeState) discardPeriodicTasks() })) @@ -214,29 +220,7 @@ describe('> router.service.ts', () => { discardPeriodicTasks() })) - it('> ... returns same value, but firstRenderFlag is true, dispatches', fakeAsync(() => { - const fakeParsedState = { - bizz: 'buzz' - } - cvtFullRouteToStateSpy.and.callFake(() => fakeParsedState) - cvtStateToHashedRoutesSpy.and.callFake(() => { - return ['foo', 'bar'] - }) - router = TestBed.inject(Router) - router.navigate(['foo', 'bar']) - - TestBed.inject(RouterService) - const store = TestBed.inject(MockStore) - const dispatchSpy = spyOn(store, 'dispatch') - - tick() - - expect(dispatchSpy).toHaveBeenCalled() - - discardPeriodicTasks() - })) - - it('> ... returns same value, but firstRenderFlag is false, does not dispatches', fakeAsync(() => { + it('> ... returns same value, does not dispatches', fakeAsync(() => { const fakeParsedState = { bizz: 'buzz' } diff --git a/src/routerModule/router.service.ts b/src/routerModule/router.service.ts index 30f4b25358f4206494b8769f06d6bb6a641f73aa..b4084a922c7405587b472f5400559503e8c8024c 100644 --- a/src/routerModule/router.service.ts +++ b/src/routerModule/router.service.ts @@ -19,6 +19,10 @@ export class RouterService { private allFetchingReady$: Observable<boolean> + private logError(...e: any[]) { + console.log(...e) + } + constructor( router: Router, pureConstantService: PureContantService, @@ -67,8 +71,13 @@ export class RouterService { ) ).subscribe(([ev, state]: [NavigationEnd, any]) => { const fullPath = ev.urlAfterRedirects - const stateFromRoute = cvtFullRouteToState(router.parseUrl(fullPath), state, (...e: any[]) => console.log(...e)) - const routeFromState = cvtStateToHashedRoutes(state) + const stateFromRoute = cvtFullRouteToState(router.parseUrl(fullPath), state, this.logError) + let routeFromState: string[] + try { + routeFromState = cvtStateToHashedRoutes(state) + } catch (_e) { + routeFromState = [] + } if ( fullPath !== `/${routeFromState.join('/')}`) { store$.dispatch( diff --git a/src/routerModule/util.ts b/src/routerModule/util.ts index 9c3cd4412311860a6af5cd13c34d0df5d2d35083..319fdbcf0ca44d89f63e0b99396a2ab26c393ca7 100644 --- a/src/routerModule/util.ts +++ b/src/routerModule/util.ts @@ -152,7 +152,7 @@ function parseSearchParamForTemplateParcellationRegion(obj: TUrlPathObj, state: export const cvtFullRouteToState = (fullPath: UrlTree, state: any, _warnCb?: Function) => { - let warnCb = _warnCb || ((...e: any[]) => console.warn(...e)) + const warnCb = _warnCb || ((...e: any[]) => console.warn(...e)) const pathFragments: UrlSegment[] = fullPath.root.hasChildren() ? fullPath.root.children['primary'].segments : [] @@ -291,11 +291,11 @@ export const cvtFullRouteToState = (fullPath: UrlTree, state: any, _warnCb?: Fun */ (() => { - const viewreHelperState = returnState[viewerStateHelperStoreName] + const viewreHelperState = returnState[viewerStateHelperStoreName] || {} const { templateSelected, parcellationSelected } = returnState['viewerState'] const { fetchedAtlases, ...rest } = viewreHelperState - const selectedAtlas = fetchedAtlases.find(a => a['templateSpaces'].find(t => t['@id'] === (templateSelected && templateSelected['@id']))) + const selectedAtlas = (fetchedAtlases || []).find(a => a['templateSpaces'].find(t => t['@id'] === (templateSelected && templateSelected['@id']))) const overlayLayer = selectedAtlas && selectedAtlas['parcellations'].find(p => p['@id'] === (parcellationSelected && parcellationSelected['@id']))