From 42308dd77462c752ccfc0aae6cf006dcbbe3ffab Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Tue, 12 Oct 2021 16:03:38 +0200
Subject: [PATCH] hotfix: region centroid hotfix: origin dataset

---
 src/atlasComponents/parcellationRegion/region.base.ts |  5 +++++
 .../regionMenu/regionMenu.template.html               |  6 +++---
 src/state/effects/viewerState.useEffect.ts            | 10 +++++-----
 src/util/siibraApiConstants/fn.ts                     |  5 +++--
 src/util/siibraApiConstants/types.ts                  | 11 ++++++-----
 5 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/src/atlasComponents/parcellationRegion/region.base.ts b/src/atlasComponents/parcellationRegion/region.base.ts
index b6e234f7b..baa623fc8 100644
--- a/src/atlasComponents/parcellationRegion/region.base.ts
+++ b/src/atlasComponents/parcellationRegion/region.base.ts
@@ -59,6 +59,11 @@ export class RegionBase {
     this.rgbDarkmode = l < 0.4
   }
 
+  get originDatainfos(){
+    if (!this._region) return []
+    return this._region._dataset_specs || this._region.originDatainfos
+  }
+
   get region(){
     return this._region
   }
diff --git a/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html b/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html
index 9717bea44..1849ae929 100644
--- a/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html
+++ b/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html
@@ -47,7 +47,7 @@
       </button>
 
       <!-- explore doi -->
-      <ng-template let-infos [ngIf]="region?.originDatainfos">
+      <ng-template let-infos [ngIf]="originDatainfos">
         <ng-container *ngFor="let info of infos">
           <a *ngFor="let url of info.urls"
             [href]="url.doi | doiParserPipe"
@@ -67,8 +67,8 @@
 <mat-accordion class="d-block mt-2">
 
   <!-- description -->
-  <ng-template [ngIf]="(region.originDatainfos || []).length > 0">
-    <ng-container *ngFor="let originData of region.originDatainfos">
+  <ng-template [ngIf]="(originDatainfos || []).length > 0">
+    <ng-container *ngFor="let originData of originDatainfos">
       <ng-template #descTmpl>
         <markdown-dom [markdown]="originData.description"
           class="text-muted text-sm">
diff --git a/src/state/effects/viewerState.useEffect.ts b/src/state/effects/viewerState.useEffect.ts
index 8474c9d2b..e1c78a6db 100644
--- a/src/state/effects/viewerState.useEffect.ts
+++ b/src/state/effects/viewerState.useEffect.ts
@@ -14,6 +14,7 @@ import { CONST } from 'common/constants'
 import { viewerStateFetchedAtlasesSelector, viewerStateGetSelectedAtlas } from "src/services/state/viewerState/selectors";
 import { viewerStateChangeNavigation } from "src/services/state/viewerState/actions";
 import { cvtNavigationObjToNehubaConfig } from 'src/viewerModule/nehuba/util'
+import { getPosFromRegion } from "src/util/siibraApiConstants/fn";
 
 const defaultPerspectiveZoom = 1e6
 const defaultZoom = 1e6
@@ -402,15 +403,14 @@ export class ViewerStateControllerUseEffect implements OnDestroy {
         return this.pureService.getRegionDetail(selectedAtlas['@id'], selectedParcellation['@id'], selectedTemplate['@id'], region).pipe(
           map(regDetail => {
             const pos = (() => {
-              if (!regDetail) throw new Error(`region detail not found!`)
-              if (!regDetail.props) throw new Error(`region does not have props defined!`)
-              if (!regDetail.props.length) throw new Error(`region props not found!`)
-              return regDetail.props[0].centroid_mm
+              const position = getPosFromRegion(regDetail)
+              if (!position) throw new Error(`centroid not found`)
+              return position
             })()
             
             return viewerStateChangeNavigation({
               navigation: {
-                position: pos.map(v => v * 1e6),
+                position: pos,
                 animation: {},
               }
             })
diff --git a/src/util/siibraApiConstants/fn.ts b/src/util/siibraApiConstants/fn.ts
index cf820dcf6..d1cc7ff55 100644
--- a/src/util/siibraApiConstants/fn.ts
+++ b/src/util/siibraApiConstants/fn.ts
@@ -1,6 +1,7 @@
 import { TRegionDetail } from "./types";
 
 export function getPosFromRegion(region: TRegionDetail){
-  if (!region?.props?.[0]) return null
-  return region.props[0].centroid_mm.map(v => v*1e6) as [number, number, number]
+  if (!region?.props) return null
+  if (!region.props.components?.[0]) return null
+  return region.props.components[0].centroid.map(v => v*1e6) as [number, number, number]
 }
\ No newline at end of file
diff --git a/src/util/siibraApiConstants/types.ts b/src/util/siibraApiConstants/types.ts
index b73781a02..62fc6057d 100644
--- a/src/util/siibraApiConstants/types.ts
+++ b/src/util/siibraApiConstants/types.ts
@@ -165,11 +165,12 @@ export type TRegionDetail = {
   }[]
   hasRegionalMap: boolean
   props: {
-    centroid_mm: [number, number, number]
-    volume_mm: number
-    surface_mm: number
-    is_cortical: number
-  }[]
+    components: {
+      centroid: [number, number, number]
+      volume: number
+    }[]
+    space: any
+  }
   links: {
     [key: string]: string
   }
-- 
GitLab