From cab21489f4cbf09a3a7429381bb54cd0457f68c1 Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Wed, 18 Nov 2020 12:06:44 +0100
Subject: [PATCH] bugfix: history bk error

---
 .../atlasViewer.history.service.ts            |  6 ++++-
 src/services/state/viewerState/selectors.ts   | 24 ++++++++++++-------
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/atlasViewer/atlasViewer.history.service.ts b/src/atlasViewer/atlasViewer.history.service.ts
index c58aa5a5f..6df36758a 100644
--- a/src/atlasViewer/atlasViewer.history.service.ts
+++ b/src/atlasViewer/atlasViewer.history.service.ts
@@ -40,7 +40,7 @@ export class AtlasViewerHistoryUseEffect implements OnDestroy {
     )),
   ).pipe(
     withLatestFrom(this.store$),
-    map(([searchUrl, storeState]: [string, IavRootStoreInterface] ) => {
+    map(([searchUrl, storeState]: [string, any] ) => {
       const search = new URLSearchParams(searchUrl)
       try {
         if (Array.from(search.keys()).length === 0) {
@@ -75,6 +75,10 @@ export class AtlasViewerHistoryUseEffect implements OnDestroy {
               ...defaultRootState.viewerState,
               fetchedTemplates: storeState.viewerState.fetchedTemplates,
             },
+            viewerStateHelper: {
+              ...defaultRootState.viewerStateHelper,
+              fetchedAtlases: storeState.viewerStateHelper.fetchedAtlases
+            }
           },
         }
       }
diff --git a/src/services/state/viewerState/selectors.ts b/src/services/state/viewerState/selectors.ts
index 934f6e003..875901dd4 100644
--- a/src/services/state/viewerState/selectors.ts
+++ b/src/services/state/viewerState/selectors.ts
@@ -40,6 +40,7 @@ export const viewerStateSelectedTemplatePureSelector = createSelector(
   viewerStateFetchedTemplatesSelector,
   viewerStateSelectedTemplateSelector,
   (fetchedTemplates, selectedTemplate) => {
+    if (!selectedTemplate) return null
     return fetchedTemplates.find(t => t['@id'] === selectedTemplate['@id'])
   }
 )
@@ -104,6 +105,7 @@ export const viewerStateGetSelectedAtlas = createSelector(
   helperState => {
     if (!helperState) return null
     const { selectedAtlasId, fetchedAtlases } = helperState
+    if (!selectedAtlasId) return null
     return selectedAtlasId && fetchedAtlases.find(a => a['@id'] === selectedAtlasId)
   }
 )
@@ -132,7 +134,7 @@ export const viewerStateAtlasParcellationSelector = createSelector(
 
 export const viewerStateAtlasLatestParcellationSelector = createSelector(
   viewerStateAtlasParcellationSelector,
-  parcs => parcs.filter( p => !p['@version'] || !p['@version']['@next'])
+  parcs => (parcs && parcs.filter( p => !p['@version'] || !p['@version']['@next']) || [])
 )
 
 export const viewerStateParcVersionSelector = createSelector(
@@ -178,12 +180,16 @@ export const viewerStateParcVersionSelector = createSelector(
 export const viewerStateSelectedTemplateFullInfoSelector = createSelector(
   viewerStateGetSelectedAtlas,
   viewerStateFetchedTemplatesSelector,
-  ({ templateSpaces }, fetchedTemplates) => templateSpaces.map(templateSpace => {
-    const fullTemplateInfo = fetchedTemplates.find(t => t['@id'] === templateSpace['@id'])
-    return {
-      ...templateSpace,
-      ...(fullTemplateInfo || {}),
-      darktheme: (fullTemplateInfo || {}).useTheme === 'dark'
-    }
-  })
+  (selectedAtlas, fetchedTemplates) => {
+    if (!selectedAtlas) return null
+    const { templateSpaces } = selectedAtlas
+    return templateSpaces.map(templateSpace => {
+      const fullTemplateInfo = fetchedTemplates.find(t => t['@id'] === templateSpace['@id'])
+      return {
+        ...templateSpace,
+        ...(fullTemplateInfo || {}),
+        darktheme: (fullTemplateInfo || {}).useTheme === 'dark'
+      }
+    })
+  } 
 )
-- 
GitLab