From 5751f9b0a1510a2b8b5d61823245ff9e5aec318a Mon Sep 17 00:00:00 2001 From: Xiao Gui <xgui3783@gmail.com> Date: Fri, 15 Oct 2021 17:25:32 +0200 Subject: [PATCH] chore: clean up siibra-api region types --- docs/releases/v2.5.4.md | 1 + .../parcellationRegion/region.base.ts | 19 ++++-- .../regionMenu/regionMenu.template.html | 16 +---- .../regionSimple/regionSimple.template.html | 2 +- .../genericInfoCmp/genericInfo.component.ts | 4 +- .../showDataset/showDataset.directive.ts | 2 +- src/util/patchPureConstants.ts | 4 +- src/util/pureConstant.service.ts | 12 ++-- src/util/siibraApiConstants/types.ts | 65 +++++++++---------- .../breadcrumb/breadcrumb.component.ts | 5 +- 10 files changed, 62 insertions(+), 68 deletions(-) diff --git a/docs/releases/v2.5.4.md b/docs/releases/v2.5.4.md index 2fb803df1..9d241dcd3 100644 --- a/docs/releases/v2.5.4.md +++ b/docs/releases/v2.5.4.md @@ -5,3 +5,4 @@ - Added version check for siibra-api - Updated deploy template - Remove unused components +- Clean up siibra-api types diff --git a/src/atlasComponents/parcellationRegion/region.base.ts b/src/atlasComponents/parcellationRegion/region.base.ts index 31de7af98..12209ddb7 100644 --- a/src/atlasComponents/parcellationRegion/region.base.ts +++ b/src/atlasComponents/parcellationRegion/region.base.ts @@ -8,6 +8,8 @@ import { viewerStateSetConnectivityRegion, viewerStateNavigateToRegion, viewerSt import { viewerStateFetchedTemplatesSelector, viewerStateGetSelectedAtlas, viewerStateSelectedTemplateFullInfoSelector, viewerStateSelectedTemplateSelector } from "src/services/state/viewerState/selectors"; import { strToRgb, verifyPositionArg, getRegionHemisphere } from 'common/util' import { getPosFromRegion } from "src/util/siibraApiConstants/fn"; +import { TRegionDetail } from "src/util/siibraApiConstants/types"; +import { IHasId } from "src/util/interfaces"; @Directive() export class RegionBase { @@ -15,7 +17,14 @@ export class RegionBase { public rgbString: string public rgbDarkmode: boolean - private _region: any + private _region: TRegionDetail & { + context: { + atlas: IHasId + template: IHasId + parcellation: IHasId + } + ngId?: string + } private _position: [number, number, number] set position(val){ @@ -34,16 +43,12 @@ export class RegionBase { set region(val) { this._region = val this.region$.next(this._region) - this.hasContext$.next(!!this._region.context) + this.hasContext$.next(!!this._region?.context) this.position = null // bug the centroid returned is currently nonsense // this.position = val?.props?.centroid_mm if (!this._region) return - - if (val?.position) { - this.position = val?.position - } const pos = getPosFromRegion(val) if (pos) { this.position = pos @@ -65,7 +70,7 @@ export class RegionBase { get originDatainfos(){ if (!this._region) return [] - return this._region._dataset_specs || this._region.originDatainfos + return (this._region._dataset_specs || []).filter(spec => spec['@type'] === 'minds/core/dataset/v1.0.0') } public hasContext$: BehaviorSubject<boolean> = new BehaviorSubject(false) diff --git a/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html b/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html index 1849ae929..db607952a 100644 --- a/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html +++ b/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html @@ -10,7 +10,6 @@ <mat-card-title> <div class="position-relative region-name iv-custom-comp text"> {{ region.name }} - <small *ngIf="region.status"> ({{region.status}})</small> </div> </mat-card-title> @@ -22,20 +21,7 @@ </span> <!-- origin datas format --> - <div *ngFor="let originDataset of (region.originDatasets || []); let index = index" - class="ml-2"> - <i>·</i> - - <span *ngIf="originDataset?.format?.name as regionOrDsFormatName; else fallbackODsnameTmpl"> - {{ regionOrDsFormatName }} - </span> - <ng-template #fallbackODsnameTmpl> - <span> - {{ regionOriginDatasetLabels$ | async | renderViewOriginDatasetlabel : index }} - </span> - </ng-template> - </div> - + <mat-divider vertical="true" class="ml-2 h-2rem"></mat-divider> <!-- position --> diff --git a/src/atlasComponents/parcellationRegion/regionSimple/regionSimple.template.html b/src/atlasComponents/parcellationRegion/regionSimple/regionSimple.template.html index 7a8ce3161..b724ab6f2 100644 --- a/src/atlasComponents/parcellationRegion/regionSimple/regionSimple.template.html +++ b/src/atlasComponents/parcellationRegion/regionSimple/regionSimple.template.html @@ -1,7 +1,7 @@ <div class="d-flex flex-row"> <small class="text-truncate flex-shrink-1 flex-grow-1"> - {{ region.name }}<span *ngIf="region.status" class="text-muted">{{' (' + region.status + ')'}}</span> + {{ region.name }} </small> <div class="flex-grow-0 flex-shrink-0 d-flex flex-row"> diff --git a/src/atlasComponents/regionalFeatures/bsFeatures/genericInfo/genericInfoCmp/genericInfo.component.ts b/src/atlasComponents/regionalFeatures/bsFeatures/genericInfo/genericInfoCmp/genericInfo.component.ts index d36cc47d4..d3fcb2216 100644 --- a/src/atlasComponents/regionalFeatures/bsFeatures/genericInfo/genericInfoCmp/genericInfo.component.ts +++ b/src/atlasComponents/regionalFeatures/bsFeatures/genericInfo/genericInfoCmp/genericInfo.component.ts @@ -5,14 +5,14 @@ import { ARIA_LABELS, CONST } from 'common/constants' import { TBSSummary } from "../../kgDataset"; import { BsFeatureService } from "../../service"; import { MAT_DIALOG_DATA } from "@angular/material/dialog"; -import { TDatainfos } from "src/util/siibraApiConstants/types"; +import { TDatainfosDetail } from "src/util/siibraApiConstants/types"; import { TRegion } from "../../type"; /** * this component is specifically used to render side panel ebrains dataset view */ -export type TInjectableData = TDatainfos & { +export type TInjectableData = TDatainfosDetail & { dataType?: string view?: ViewRef | TemplateRef<any> region?: TRegion diff --git a/src/atlasComponents/regionalFeatures/bsFeatures/kgDataset/showDataset/showDataset.directive.ts b/src/atlasComponents/regionalFeatures/bsFeatures/kgDataset/showDataset/showDataset.directive.ts index 2cc1dae60..5aeb3c1eb 100644 --- a/src/atlasComponents/regionalFeatures/bsFeatures/kgDataset/showDataset/showDataset.directive.ts +++ b/src/atlasComponents/regionalFeatures/bsFeatures/kgDataset/showDataset/showDataset.directive.ts @@ -2,7 +2,7 @@ import { Directive, HostListener, Inject, Input, Optional } from "@angular/core" import { MatDialog, MatDialogConfig } from "@angular/material/dialog"; import { MatSnackBar } from "@angular/material/snack-bar"; import { OVERWRITE_SHOW_DATASET_DIALOG_TOKEN, TOverwriteShowDatasetDialog } from "src/util/interfaces"; -import { TRegion as TSiibraRegion } from "src/util/siibraApiConstants/types"; +import { TRegionDetail as TSiibraRegion } from "src/util/siibraApiConstants/types"; import { TRegion as TContextRegion } from 'src/atlasComponents/regionalFeatures/bsFeatures/type' export const IAV_DATASET_SHOW_DATASET_DIALOG_CMP = 'IAV_DATASET_SHOW_DATASET_DIALOG_CMP' diff --git a/src/util/patchPureConstants.ts b/src/util/patchPureConstants.ts index 681860add..a8fc56c92 100644 --- a/src/util/patchPureConstants.ts +++ b/src/util/patchPureConstants.ts @@ -6,7 +6,7 @@ */ import { IHasId } from "./interfaces"; -import { TRegion } from "./siibraApiConstants/types"; +import { TRegionSummary } from "./siibraApiConstants/types"; type TAppend = { parent: IHasId | { name: string } @@ -22,7 +22,7 @@ type TPatchRegion = { '@id': string targetSpace: IHasId[] | '*' targetParcellation: IHasId[] | '*' - payload: Partial<TRegion> + payload: Partial<TRegionSummary> } & (TAppend | TPatch) const encoder = new TextEncoder() diff --git a/src/util/pureConstant.service.ts b/src/util/pureConstant.service.ts index d665d97fb..3e9b7abd1 100644 --- a/src/util/pureConstant.service.ts +++ b/src/util/pureConstant.service.ts @@ -9,7 +9,7 @@ import { LoggingService } from "src/logging"; import { viewerStateFetchedAtlasesSelector, viewerStateSelectedTemplateSelector } from "src/services/state/viewerState/selectors"; import { BS_ENDPOINT, BACKENDURL } from "src/util/constants"; import { flattenReducer } from 'common/util' -import { IVolumeTypeDetail, TAtlas, TId, TParc, TRegion, TRegionDetail, TSpaceFull, TSpaceSummary, TVolumeSrc } from "./siibraApiConstants/types"; +import { IVolumeTypeDetail, TAtlas, TId, TParc, TRegionDetail, TRegionSummary, TSpaceFull, TSpaceSummary, TVolumeSrc } from "./siibraApiConstants/types"; import { MultiDimMap, recursiveMutate, mutateDeepMerge } from "./fn"; import { patchRegions } from './patchPureConstants' import { environment } from "src/environments/environment"; @@ -216,7 +216,7 @@ Raise/track issues at github repo: <a target = "_blank" href = "${this.repoUrl}" ) private getRegions(atlasId: string, parcId: string, spaceId: string){ - return this.http.get<TRegion[]>( + return this.http.get<TRegionSummary[]>( `${this.bsEndpoint}/atlases/${encodeURIComponent(atlasId)}/parcellations/${encodeURIComponent(parcId)}/regions`, { params: { @@ -252,7 +252,7 @@ Raise/track issues at github repo: <a target = "_blank" href = "${this.repoUrl}" if (p.parent['name'] === region.name) { if (!region.children) region.children = [] region.children.push( - p.payload as TRegion + p.payload as TRegionSummary ) } } @@ -547,7 +547,11 @@ Raise/track issues at github repo: <a target = "_blank" href = "${this.repoUrl}" * in the case of interpolated, it sucks that the ngLayerObj will be set multiple times */ - const dedicatedMap = region._dataset_specs.filter(spec => spec.space_id === tmpl.id && spec['volume_type'] === 'neuroglancer/precomputed') + const dedicatedMap = region._dataset_specs.filter( + spec => spec["@type"] === 'fzj/tmp/volume_type/v0.0.1' + && spec.space_id === tmpl.id + && spec['volume_type'] === 'neuroglancer/precomputed' + ) as TVolumeSrc<'neuroglancer/precomputed'>[] if (dedicatedMap.length === 1) { const ngId = getNgId(atlas['@id'], tmpl.id, parc.id, dedicatedMap[0]['@id']) region['ngId'] = ngId diff --git a/src/util/siibraApiConstants/types.ts b/src/util/siibraApiConstants/types.ts index 7f3170ad6..40feae057 100644 --- a/src/util/siibraApiConstants/types.ts +++ b/src/util/siibraApiConstants/types.ts @@ -96,7 +96,14 @@ export type TParcSummary = { name: string } -export type TDatainfos = { +export type TDatainfoSummary = { + '@type': 'minds/core/dataset/v1.0.0' + kgSchema: string + kgId: string +} + +export type TDatainfosDetail = { + '@type': 'minds/core/dataset/v1.0.0' name: string description: string urls: { @@ -148,22 +155,37 @@ export type TParc = { _dataset_specs: TDatasetSpec[] } +export type TRegionSummary = { + name: string + labelIndex: number + rgb: [number, number, number] + id: number + availableIn: { + id: string + name: string + }[] + _dataset_specs: (TVolumeSrc<keyof IVolumeTypeDetail> | TDatainfoSummary)[] + children: TRegionSummary[] +} + export type TRegionDetail = { name: string - children: TRegionDetail[] - rgb: number[] - id: string labelIndex: number - volumeSrc: { - [key: string]: { - [key: string]: TVolumeSrc<keyof IVolumeTypeDetail>[] - } + rgb: [number, number, number] + id: { + kg: TKgIdentifier } availableIn: { id: string name: string }[] + _dataset_specs: (TVolumeSrc<keyof IVolumeTypeDetail> | TDatainfosDetail)[] + + children: TRegionDetail[] hasRegionalMap: boolean + links: { + [key: string]: string + } props: { components: { centroid: [number, number, number] @@ -171,31 +193,6 @@ export type TRegionDetail = { }[] space: any } - links: { - [key: string]: string - } - originDatainfos: TDatainfos[] + } -export type TRegion = { - name: string - children: TRegion[] - - labelIndex?: number - rgb?: number[] - id?: { - kg: TKgIdentifier - } - - _dataset_specs: TVolumeSrc<keyof IVolumeTypeDetail>[] - - /** - * missing - */ - - originDatasets?: ({ - filename: string - } & TKgIdentifier) [] - - position?: number[] -} diff --git a/src/viewerModule/viewerStateBreadCrumb/breadcrumb/breadcrumb.component.ts b/src/viewerModule/viewerStateBreadCrumb/breadcrumb/breadcrumb.component.ts index a57a22a76..8bf705e68 100644 --- a/src/viewerModule/viewerStateBreadCrumb/breadcrumb/breadcrumb.component.ts +++ b/src/viewerModule/viewerStateBreadCrumb/breadcrumb/breadcrumb.component.ts @@ -7,7 +7,7 @@ import { distinctUntilChanged, map } from "rxjs/operators"; import { viewerStateHelperSelectParcellationWithId, viewerStateRemoveAdditionalLayer, viewerStateSetSelectedRegions } from "src/services/state/viewerState.store.helper"; import { ngViewerActionClearView, ngViewerSelectorClearViewEntries } from "src/services/state/ngViewerState.store.helper"; import { OVERWRITE_SHOW_DATASET_DIALOG_TOKEN } from "src/util/interfaces"; -import { TDatainfos, TParc, TSimpleInfo } from "src/util/siibraApiConstants/types"; +import { TDatainfosDetail } from "src/util/siibraApiConstants/types"; @Component({ selector: 'viewer-state-breadcrumb', @@ -120,10 +120,11 @@ export class ViewerStateBreadCrumb { }) export class OriginalDatainfoPipe implements PipeTransform{ - public transform(arr: TDatainfos[]): TDatainfos[]{ + public transform(arr: TDatainfosDetail[]): TDatainfosDetail[]{ if (arr.length > 0) { return arr.map(d => { return { + '@type': 'minds/core/dataset/v1.0.0', name: d.name, description: d.name, urls: [], -- GitLab