From 5624041841239019763e66b2e0fd224e7da65820 Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Tue, 21 Mar 2023 17:32:13 +0100
Subject: [PATCH] fix: threesurfer update colormap

---
 .../lifecycle/lifecycle.component.ts          | 47 +++++++++++++++++++
 src/viewerModule/threeSurfer/module.ts        |  4 +-
 src/viewerModule/threeSurfer/store/effects.ts |  5 +-
 .../viewerCmp/viewerCmp.template.html         |  4 +-
 4 files changed, 56 insertions(+), 4 deletions(-)
 create mode 100644 src/viewerModule/threeSurfer/lifecycle/lifecycle.component.ts

diff --git a/src/viewerModule/threeSurfer/lifecycle/lifecycle.component.ts b/src/viewerModule/threeSurfer/lifecycle/lifecycle.component.ts
new file mode 100644
index 000000000..0130b932c
--- /dev/null
+++ b/src/viewerModule/threeSurfer/lifecycle/lifecycle.component.ts
@@ -0,0 +1,47 @@
+import { Component, EventEmitter, Output } from "@angular/core";
+import { Store } from "@ngrx/store";
+import { merge } from "rxjs";
+import { debounceTime, mapTo } from "rxjs/operators";
+import { atlasSelection } from "src/state";
+import { TViewerEvent } from "src/viewerModule/viewer.interface";
+
+/**
+ * TODO this compnent destroys and recreates thresurfer on parc change
+ * ideally, this should be handlable in three surfer component
+ * need to refactor threesurfer glu cmp to be more declarative
+ */
+
+@Component({
+  selector: 'tmp-threesurfer-lifecycle',
+  template: `
+    <three-surfer-glue-cmp
+      *ngIf="showThreeSurfer$ | async"
+      (viewerEvent)="handleViewerEvent($event)">
+    </three-surfer-glue-cmp>
+    `
+})
+
+export class TmpThreeSurferLifeCycle{
+  @Output()
+  viewerEvent = new EventEmitter<TViewerEvent<"threeSurfer">>()
+  handleViewerEvent(ev: TViewerEvent<"threeSurfer">){
+    this.viewerEvent.emit(ev)
+  }
+
+  constructor(private store: Store){
+
+  }
+
+  #onATP = this.store.pipe(
+    atlasSelection.fromRootStore.distinctATP()
+  )
+  showThreeSurfer$ = merge(
+    this.#onATP.pipe(
+      mapTo(false)
+    ),
+    this.#onATP.pipe(
+      debounceTime(160),
+      mapTo(true)
+    )
+  )
+}
diff --git a/src/viewerModule/threeSurfer/module.ts b/src/viewerModule/threeSurfer/module.ts
index 7a1f1c3e3..dd1251915 100644
--- a/src/viewerModule/threeSurfer/module.ts
+++ b/src/viewerModule/threeSurfer/module.ts
@@ -9,6 +9,7 @@ import { ThreeSurferGlueCmp } from "./threeSurferGlue/threeSurfer.component";
 import { ThreeSurferViewerConfig } from "./tsViewerConfig/tsViewerConfig.component";
 import { nameSpace, reducer, ThreeSurferEffects } from "./store"
 import { EffectsModule } from "@ngrx/effects";
+import { TmpThreeSurferLifeCycle } from "./lifecycle/lifecycle.component";
 
 @NgModule({
   imports: [
@@ -28,9 +29,10 @@ import { EffectsModule } from "@ngrx/effects";
   declarations: [
     ThreeSurferGlueCmp,
     ThreeSurferViewerConfig,
+    TmpThreeSurferLifeCycle,
   ],
   exports: [
-    ThreeSurferGlueCmp,
+    TmpThreeSurferLifeCycle,
   ]
 })
 
diff --git a/src/viewerModule/threeSurfer/store/effects.ts b/src/viewerModule/threeSurfer/store/effects.ts
index 55a49c19c..501107552 100644
--- a/src/viewerModule/threeSurfer/store/effects.ts
+++ b/src/viewerModule/threeSurfer/store/effects.ts
@@ -41,7 +41,10 @@ export class ThreeSurferEffects {
   private threeSurferBaseCustomLayers$: Observable<ThreeSurferCustomLayer[]> = this.store.pipe(
     select(atlasAppearance.selectors.customLayers),
     map(
-      cl => cl.filter(layer => layer.clType === "baselayer/threesurfer") as ThreeSurferCustomLayer[]
+      cl => cl.filter(layer => 
+        layer.clType === "baselayer/threesurfer" ||
+        layer.clType === "baselayer/threesurfer-label"
+      ) as ThreeSurferCustomLayer[]
     )
   )
 
diff --git a/src/viewerModule/viewerCmp/viewerCmp.template.html b/src/viewerModule/viewerCmp/viewerCmp.template.html
index 48572be29..fb1ca0018 100644
--- a/src/viewerModule/viewerCmp/viewerCmp.template.html
+++ b/src/viewerModule/viewerCmp/viewerCmp.template.html
@@ -430,10 +430,10 @@
       </iav-cmp-viewer-nehuba-glue>
 
       <!-- three surfer (free surfer viewer) -->
-      <three-surfer-glue-cmp class="d-block w-100 h-100 position-absolute left-0 tosxplr-p-0"
+      <tmp-threesurfer-lifecycle class="d-block w-100 h-100 position-absolute left-0 tosxplr-p-0"
         *ngSwitchCase="'threeSurfer'"
         (viewerEvent)="handleViewerEvent($event)">
-      </three-surfer-glue-cmp>
+      </tmp-threesurfer-lifecycle>
 
       <!-- if not supported, show not supported message -->
       <div *ngSwitchCase="'notsupported'">Template not supported by any of the viewers</div>
-- 
GitLab