From b49fe5b9234fd87d0a59643e18765e7dc280daf9 Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Fri, 26 Nov 2021 13:20:03 +0100
Subject: [PATCH] bugfix: receptor & kg dataset mark reactive data

---
 .../genericInfoCmp/genericInfo.component.ts   |  4 ++-
 .../receptor/entry/entry.component.ts         | 26 ++++++++++---------
 .../receptor/entry/entry.template.html        |  7 +++--
 .../regionalFeatureWrapper.component.ts       |  2 +-
 .../viewerCmp/viewerCmp.component.ts          |  5 ++--
 5 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/src/atlasComponents/regionalFeatures/bsFeatures/genericInfo/genericInfoCmp/genericInfo.component.ts b/src/atlasComponents/regionalFeatures/bsFeatures/genericInfo/genericInfoCmp/genericInfo.component.ts
index ceec64a21..ca0d7c57c 100644
--- a/src/atlasComponents/regionalFeatures/bsFeatures/genericInfo/genericInfoCmp/genericInfo.component.ts
+++ b/src/atlasComponents/regionalFeatures/bsFeatures/genericInfo/genericInfoCmp/genericInfo.component.ts
@@ -1,4 +1,4 @@
-import { AfterViewInit, Component, Inject, Input, OnChanges, OnDestroy, Optional, TemplateRef, ViewChild, ViewContainerRef, ViewRef } from "@angular/core";
+import { AfterViewInit, ChangeDetectorRef, Component, Inject, Input, OnChanges, OnDestroy, Optional, TemplateRef, ViewChild, ViewContainerRef, ViewRef } from "@angular/core";
 import { BsRegionInputBase } from "../../bsRegionInputBase";
 import { KG_REGIONAL_FEATURE_KEY, TBSDetail, UNDER_REVIEW } from "../../kgRegionalFeature/type";
 import { ARIA_LABELS, CONST } from 'common/constants'
@@ -69,6 +69,7 @@ export class GenericInfoCmp extends BsRegionInputBase implements OnChanges, Afte
 
   constructor(
     svc: BsFeatureService,
+    private cdr: ChangeDetectorRef,
     @Optional() @Inject(MAT_DIALOG_DATA) data: TInjectableData
   ){
     super(svc)
@@ -130,6 +131,7 @@ export class GenericInfoCmp extends BsRegionInputBase implements OnChanges, Afte
       },
       () => {
         this.loadingFlag = false
+        this.cdr.markForCheck()
       }
     )
   }
diff --git a/src/atlasComponents/regionalFeatures/bsFeatures/receptor/entry/entry.component.ts b/src/atlasComponents/regionalFeatures/bsFeatures/receptor/entry/entry.component.ts
index 8acaa8e68..33bc2bbde 100644
--- a/src/atlasComponents/regionalFeatures/bsFeatures/receptor/entry/entry.component.ts
+++ b/src/atlasComponents/regionalFeatures/bsFeatures/receptor/entry/entry.component.ts
@@ -1,12 +1,11 @@
-import { Component, Inject, OnDestroy, Optional } from "@angular/core";
-import { Observable, of, Subject, Subscription } from "rxjs";
+import { ChangeDetectorRef, Component, Inject, OnDestroy, Optional } from "@angular/core";
+import { BehaviorSubject, Observable, of, Subscription } from "rxjs";
 import { filter, map, shareReplay, startWith, switchMap, tap } from "rxjs/operators";
 import { BsRegionInputBase } from "../../bsRegionInputBase";
 import { REGISTERED_FEATURE_INJECT_DATA } from "../../constants";
 import { BsFeatureService, TFeatureCmpInput } from "../../service";
 import { TBSDetail } from "../type";
 import { ARIA_LABELS } from 'common/constants'
-import { isPr } from "../profile/profile.component";
 
 @Component({
   selector: 'bs-features-receptor-entry',
@@ -21,7 +20,7 @@ export class BsFeatureReceptorEntry extends BsRegionInputBase implements OnDestr
   private sub: Subscription[] = []
   public ARIA_LABELS = ARIA_LABELS
 
-  private selectedREntryId$ = new Subject<string>()
+  private selectedREntryId$ = new BehaviorSubject<string>(null)
   private _selectedREntryId: string
   set selectedREntryId(id: string){
     this.selectedREntryId$.next(id)
@@ -50,13 +49,6 @@ export class BsFeatureReceptorEntry extends BsRegionInputBase implements OnDestr
   public receptorsSummary$ = this.region$.pipe(
     filter(v => !!v),
     switchMap(() => this.getFeatureInstancesList('ReceptorDistribution')),
-    tap(arr => {
-      if (arr && arr.length > 0) {
-        this.selectedREntryId = arr[0]['@id']
-      } else {
-        this.selectedREntryId = null
-      }
-    }),
     startWith([]),
     shareReplay(1),
   )
@@ -75,11 +67,21 @@ export class BsFeatureReceptorEntry extends BsRegionInputBase implements OnDestr
 
   constructor(
     svc: BsFeatureService,
+    cdr: ChangeDetectorRef,
     @Optional() @Inject(REGISTERED_FEATURE_INJECT_DATA) data: TFeatureCmpInput
   ){
     super(svc, data)
     this.sub.push(
-      this.selectedReceptor$.subscribe()
+      this.selectedReceptor$.subscribe(() => {
+        cdr.markForCheck()
+      }),
+      this.receptorsSummary$.subscribe(arr => {
+        if (arr && arr.length > 0) {
+          this.selectedREntryId = arr[0]['@id']
+        } else {
+          this.selectedREntryId = null
+        }
+      })
     )
   }
 }
diff --git a/src/atlasComponents/regionalFeatures/bsFeatures/receptor/entry/entry.template.html b/src/atlasComponents/regionalFeatures/bsFeatures/receptor/entry/entry.template.html
index 813c489a6..48a24c834 100644
--- a/src/atlasComponents/regionalFeatures/bsFeatures/receptor/entry/entry.template.html
+++ b/src/atlasComponents/regionalFeatures/bsFeatures/receptor/entry/entry.template.html
@@ -8,8 +8,11 @@
   </mat-option>
 </mat-select>
 
-<ng-container *ngIf="selectedReceptor$ | async as selectedRec">
+<ng-template [ngIf]="!(selectedReceptor$ | async)">
+  <spinner-cmp></spinner-cmp>
+</ng-template>
 
+<ng-template let-selectedRec [ngIf]="selectedReceptor$ | async">
   <bs-features-receptor-fingerprint
     (onSelectReceptor)="onSelectReceptor($event)"
     [bsFeature]="selectedRec">
@@ -44,4 +47,4 @@
     </bs-features-receptor-autoradiograph>
   </ng-template>
 
-</ng-container>
+</ng-template>
diff --git a/src/atlasComponents/regionalFeatures/bsFeatures/regionalFeatureWrapper/regionalFeatureWrapper.component.ts b/src/atlasComponents/regionalFeatures/bsFeatures/regionalFeatureWrapper/regionalFeatureWrapper.component.ts
index 72d4595fa..76a2ad1f2 100644
--- a/src/atlasComponents/regionalFeatures/bsFeatures/regionalFeatureWrapper/regionalFeatureWrapper.component.ts
+++ b/src/atlasComponents/regionalFeatures/bsFeatures/regionalFeatureWrapper/regionalFeatureWrapper.component.ts
@@ -2,7 +2,7 @@ import { Component, ComponentFactory, ComponentFactoryResolver, Inject, Injector
 import { IBSSummaryResponse, TContextedFeature, TRegion } from "../type";
 import { BsFeatureService, TFeatureCmpInput } from "../service";
 import { combineLatest, Observable, Subject } from "rxjs";
-import { debounceTime, map, shareReplay, startWith, tap } from "rxjs/operators";
+import { debounceTime, map, shareReplay, startWith } from "rxjs/operators";
 import { REGISTERED_FEATURE_INJECT_DATA } from "../constants";
 import { ARIA_LABELS } from 'common/constants'
 import {
diff --git a/src/viewerModule/viewerCmp/viewerCmp.component.ts b/src/viewerModule/viewerCmp/viewerCmp.component.ts
index f930dff41..68b8a9374 100644
--- a/src/viewerModule/viewerCmp/viewerCmp.component.ts
+++ b/src/viewerModule/viewerCmp/viewerCmp.component.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, Component, ComponentFactory, ComponentFactoryResolver, Inject, Injector, Input, OnDestroy, Optional, TemplateRef, ViewChild, ViewContainerRef } from "@angular/core";
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactory, ComponentFactoryResolver, Inject, Injector, Input, OnDestroy, Optional, TemplateRef, ViewChild, ViewContainerRef } from "@angular/core";
 import { select, Store } from "@ngrx/store";
 import { combineLatest, merge, NEVER, Observable, of, Subscription } from "rxjs";
 import {catchError, debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap } from "rxjs/operators";
@@ -231,6 +231,7 @@ export class ViewerCmp implements OnDestroy {
     private cStore: ComponentStore<TCStoreViewerCmp>,
     cfr: ComponentFactoryResolver,
     private dialogSvc: DialogService,
+    private cdr: ChangeDetectorRef,
     @Optional() @Inject(_PLI_VOLUME_INJ_TOKEN) private _pliVol$: Observable<_TPLIVal[]>,
     @Optional() @Inject(REGION_OF_INTEREST) public regionOfInterest$: Observable<any>
   ){
@@ -375,7 +376,7 @@ export class ViewerCmp implements OnDestroy {
 
         this.genericInfoVCR.clear()
         this.genericInfoVCR.createComponent(this.genericInfoCF, null, injector)
-
+        this.cdr.markForCheck()
       })
     )
   }
-- 
GitLab