diff --git a/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/ieegCmp/ieeg.component.ts b/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/ieegCmp/ieeg.component.ts index 7eca7ea1d1fec74f7afdecb510d20bc84532a318..4694a43429ea69191d74fc69b4e2970cabdf1a67 100644 --- a/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/ieegCmp/ieeg.component.ts +++ b/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/ieegCmp/ieeg.component.ts @@ -6,7 +6,7 @@ import { viewerStateAddUserLandmarks, viewerStateChangeNavigation, viewreStateRe import { BsRegionInputBase } from "../../bsRegionInputBase"; import { REGISTERED_FEATURE_INJECT_DATA } from "../../constants"; import { BsFeatureService, TFeatureCmpInput } from "../../service"; -import { TBSDEtail, TBSSummary, SIIBRA_FEATURE_KEY, TContactPoint } from '../type' +import { TBSDEtail, TBSSummary, SIIBRA_FEATURE_KEY, TContactPoint, TElectrode } from '../type' import { ARIA_LABELS, CONST } from 'common/constants' @Component({ @@ -64,12 +64,12 @@ export class BsFeatureIEEGCmp extends BsRegionInputBase implements OnDestroy{ this.unloadLandmarks() while(this.subs.length) this.subs.pop().unsubscribe() } - private openElectrodeIdSet = new Set<string>() - public openElectrodeId$ = new BehaviorSubject<string[]>([]) - handleDatumExpansion(id: string, state: boolean) { - if (state) this.openElectrodeIdSet.add(id) - else this.openElectrodeIdSet.delete(id) - this.openElectrodeId$.next(Array.from(this.openElectrodeIdSet)) + private openElectrodeSet = new Set<TElectrode>() + public openElectrode$ = new BehaviorSubject<TElectrode[]>([]) + handleDatumExpansion(electrode: TElectrode, state: boolean) { + if (state) this.openElectrodeSet.add(electrode) + else this.openElectrodeSet.delete(electrode) + this.openElectrode$.next(Array.from(this.openElectrodeSet)) this.loadLandmarks() } @@ -109,19 +109,23 @@ export class BsFeatureIEEGCmp extends BsRegionInputBase implements OnDestroy{ }[] for (const detail of this.results) { - for (const key in detail.__electrodes){ - const electorde = detail.__electrodes[key] - if (!electorde.inRoi) continue - for (const cpKey in electorde.__contact_points) { - const cp = electorde.__contact_points[cpKey] - lms.push({ - "@id": `${detail.name}:${key}#${cpKey}`, - id: `${detail.name}:${key}#${cpKey}`, - name: `${detail.name}:${key}#${cpKey}`, - position: cp.coord, - color: cp.inRoi ? [255, 100, 100]: [255,255,255], - showInSliceView: this.openElectrodeIdSet.has(electorde.id) - }) + for (const subjectKey in detail.electrodes){ + const electrodes = detail.electrodes[subjectKey] + for (const electrodId in electrodes) { + const electrode = electrodes[electrodId] + if (!electrode.inRoi) continue + + for (const cpKey in electrode.contact_points) { + const cp = electrode.contact_points[cpKey] + lms.push({ + "@id": `${detail.name}:${subjectKey}#${cpKey}`, + id: `${detail.name}:${subjectKey}#${cpKey}`, + name: `${detail.name}:${subjectKey}#${cpKey}`, + position: cp.location, + color: cp.inRoi ? [255, 100, 100]: [255, 255, 255], + showInSliceView: this.openElectrodeSet.has(electrode) + }) + } } } } @@ -135,11 +139,11 @@ export class BsFeatureIEEGCmp extends BsRegionInputBase implements OnDestroy{ } handleContactPtClk(cp: TContactPoint) { - const { coord } = cp + const { location } = cp this.store.dispatch( viewerStateChangeNavigation({ navigation: { - position: coord.map(v => v * 1e6), + position: location.map(v => v * 1e6), positionReal: true, animation: {} }, diff --git a/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/ieegCmp/ieeg.template.html b/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/ieegCmp/ieeg.template.html index d8c35529a494deea91151a21df494b9cb0c21caa..ff8c7d311b9fda82ac9131dab0bac41706274ba2 100644 --- a/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/ieegCmp/ieeg.template.html +++ b/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/ieegCmp/ieeg.template.html @@ -4,11 +4,21 @@ <ng-template #contenttmpl> <ng-container *ngFor="let result of results$ | async"> - <ng-container *ngFor="let item of result | getProperty : '__electrodes' | keyvalue"> - <ng-template [ngIf]="item.value.inRoi"> - <ng-container *ngTemplateOutlet="electrodeTmpl; context: { $implicit: item.value }"> - </ng-container> - </ng-template> + <ng-container *ngFor="let subjectKeyVal of result | getProperty : 'electrodes' | keyvalue"> + + <ng-container *ngFor="let electrodeKeyVal of subjectKeyVal.value | keyvalue; let first = first"> + + <!-- subject id --> + <!-- <h4 *ngIf="first" class="mat-h4"> + {{ subjectKeyVal.key }} + </h4> --> + + <!-- electrodes --> + <ng-template [ngIf]="electrodeKeyVal.value.inRoi"> + <ng-container *ngTemplateOutlet="electrodeTmpl; context: { $implicit: electrodeKeyVal.value }"> + </ng-container> + </ng-template> + </ng-container> </ng-container> </ng-container> </ng-template> @@ -17,16 +27,16 @@ <ng-template #electrodeTmpl let-electrode> <mat-expansion-panel - [expanded]="openElectrodeId$ | async | arrayContains : electrode.id" - (opened)="handleDatumExpansion(electrode.id, true)" - (closed)="handleDatumExpansion(electrode.id, false)" + [expanded]="openElectrode$ | async | arrayContains : electrode" + (opened)="handleDatumExpansion(electrode, true)" + (closed)="handleDatumExpansion(electrode, false)" togglePosition="before"> <mat-expansion-panel-header> <mat-panel-title> Electrode </mat-panel-title> <mat-panel-description class="text-nowrap"> - {{ electrode.id }} + {{ electrode.electrode_id }} </mat-panel-description> </mat-expansion-panel-header> @@ -52,8 +62,8 @@ <section class="d-flex align-items-center mt-1"> <section id="contact-points-list" class="flex-grow-1 flex-shrink-1 overflow-x-auto"> <div role="list"> - <mat-chip *ngFor="let cp_kv of electrode['__contact_points'] | keyvalue" - [matTooltip]="cp_kv['value']['coord']" + <mat-chip *ngFor="let cp_kv of electrode.contact_points | keyvalue" + [matTooltip]="cp_kv['value']['location']" (click)="handleContactPtClk(cp_kv['value'])" class="ml-1"> {{ cp_kv['key'] }} diff --git a/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/type.ts b/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/type.ts index 60d27b1eeec12883f9c598f136a0b254ac157996..1941f74681b40fd26ad60078603a9b1c1fd09ceb 100644 --- a/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/type.ts +++ b/src/atlasComponents/regionalFeatures/bsFeatures/ieeg/type.ts @@ -4,24 +4,26 @@ export type TBSSummary = { } export type TContactPoint = { - 'id': string - 'coord': [number, number, number] - 'inRoi'?: boolean + id: string + location: [number, number, number] + inRoi?: boolean } export type TElectrode = { - id: string + electrode_id: string subject_id: string - __contact_points: { + contact_points: { [key: string]: TContactPoint } - inRoi: boolean + inRoi?: boolean } export type TBSDEtail = { - '__kg_id': string - '__electrodes': { - [key: string]: TElectrode + 'kg_id': string + 'electrodes': { + [key: string]: { + [key: string]: TElectrode + } } } export type _TBSDEtail = {