Skip to content

Commit 6984536

Browse files
committed
Add a list of members in "Protein complexes" sect.
Refs #2559
1 parent 9082ca4 commit 6984536

3 files changed

Lines changed: 69 additions & 10 deletions

File tree

‎src/app/complex-viewer/complex-viewer.component.css‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
1-
.complex-info {
1+
.flex-container {
2+
display: flex;
3+
flex-wrap: wrap;
4+
}
5+
6+
.complex-members {
7+
flex: auto;
8+
width: 10em;
29
font-size: 110%;
10+
padding-left: 1em;
11+
padding-top: 1.9em;
12+
}
13+
14+
.complex-container {
15+
flex: 0;
316
}
417

5-
.complex-select, .complex-info div {
18+
.complex-select, .complex-info {
19+
font-size: 110%;
620
padding-bottom: 0.5em;
721
}
822

‎src/app/complex-viewer/complex-viewer.component.html‎

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
Protein complexes
44
</legend>
55

6-
<div class="complex-select" *ngIf="complexes.length > 1">
6+
<div class="complex-select">
7+
<div *ngIf="complexes.length > 1">
78
Select a complex containing {{geneDetails.name || geneDetails.uniquename}}:
89
<select title="Select a complex" [(ngModel)]="currentComplex"
910
(change)="complexChanged()">
@@ -13,12 +14,16 @@
1314
</select>
1415
</div>
1516

17+
<div *ngIf="complexes.length == 1">
18+
{{geneDetails.name || geneDetails.uniquename}} is a part of protein complex {{currentComplex.complex_id}}
19+
<span class="complex-name" *ngIf="currentComplex.complex_name">"{{currentComplex.complex_name}}"</span>
20+
</div>
21+
</div>
22+
23+
<div class="flex-container">
1624
<div class="complex-container">
1725
<div class="complex-info">
18-
<div *ngIf="complexes.length == 1">{{geneDetails.name || geneDetails.uniquename}} is a part of protein
19-
complex {{currentComplex.complex_id}}
20-
<span class="complex-name" *ngIf="currentComplex.complex_name">"{{currentComplex.complex_name}}"</span></div>
21-
<div>View details at <a href="{{complexPortalUrl(currentComplex.complex_id)}}">Complex Portal</a></div>
26+
View details at <a href="{{complexPortalUrl(currentComplex.complex_id)}}">Complex Portal</a>
2227
</div>
2328

2429
<div class="complex-view-frame">
@@ -27,4 +32,21 @@
2732
</iframe>
2833
</div>
2934
</div>
35+
36+
<div *ngIf="currentGenes.length > 0" class="complex-members">
37+
Complex members:
38+
<ul>
39+
<li *ngFor = "let gene of currentGenes">
40+
<span *ngIf="gene.uniquename == geneDetails.uniquename" title="Current gene">
41+
{{gene.name || gene.uniquename}}
42+
</span>
43+
<a *ngIf="gene.uniquename != geneDetails.uniquename"
44+
title="Visit gene page for {{gene.name || gene.uniquename}}: {{gene.product || ''}}"
45+
routerLink="/gene/{{gene.uniquename}}">
46+
{{gene.name || gene.uniquename}}
47+
</a>
48+
</li>
49+
</ul>
50+
</div>
51+
</div>
3052
</fieldset>

‎src/app/complex-viewer/complex-viewer.component.ts‎

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { Component, OnInit, OnChanges, Input,
22
ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
33
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
4-
import { GeneDetails, ProteinComplexDetails } from '../pombase-api.service';
4+
import { PombaseAPIService, GeneSummaryMap, GeneSummary,
5+
GeneDetails, ProteinComplexDetails } from '../pombase-api.service';
56
import { getXrfWithPrefix } from '../config';
67

78
@Component({
@@ -17,9 +18,15 @@ export class ComplexViewerComponent implements OnInit, OnChanges {
1718
complexes: Array<ProteinComplexDetails> = [];
1819
currentComplexUniquename?: string = undefined;
1920
currentComplex?: ProteinComplexDetails = undefined;
21+
currentGenes: Array<GeneSummary> = [];
22+
23+
private geneSummaryMapPromise: Promise<GeneSummaryMap>;
2024

2125
constructor(private changeDetectorRef: ChangeDetectorRef,
22-
private sanitizer: DomSanitizer) { }
26+
private sanitizer: DomSanitizer,
27+
private pombaseApiService: PombaseAPIService) {
28+
this.geneSummaryMapPromise = this.pombaseApiService.getGeneSummaryMapPromise();
29+
}
2330

2431
complexPortalUrl(complexId: string): string {
2532
const xrfDetails = getXrfWithPrefix('ComplexPortal', complexId)!;
@@ -32,19 +39,35 @@ export class ComplexViewerComponent implements OnInit, OnChanges {
3239
}
3340

3441
complexChanged() {
35-
this.changeDetectorRef.detectChanges();
42+
this.setGenes();
43+
this.changeDetectorRef.detectChanges();
44+
}
45+
46+
setGenes() {
47+
this.currentGenes = [];
48+
this.geneSummaryMapPromise.then(summaryMap => {
49+
if (this.currentComplex) {
50+
this.currentGenes = this.currentComplex.genes
51+
.map(geneUniquename => summaryMap[geneUniquename])
52+
this.changeDetectorRef.detectChanges();
53+
}
54+
});
3655
}
3756

3857
ngOnInit() {
58+
console.log("ngOnInit()")
3959
}
4060

4161
ngOnChanges() {
62+
console.log("ngOnChanges()")
4263
if (this.geneDetails) {
4364
this.complexes = this.geneDetails.complexes;
4465
this.currentComplex = this.complexes[0];
66+
this.setGenes();
4567
} else {
4668
this.complexes = [];
4769
this.currentComplex = undefined;
70+
this.currentGenes = [];
4871
}
4972
}
5073
}

0 commit comments

Comments
 (0)