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