Skip to content

Commit 4ccb692

Browse files
frano-mNoopDog
authored andcommitted
On visualization portal links, add hover text to indicate the full name of the portal e.g. for SCP add hover for 'Single Cell Portal'. Resolves #1086. (#1093)
1 parent 5543f12 commit 4ccb692

File tree

4 files changed

+52
-7
lines changed

4 files changed

+52
-7
lines changed

spa/src/app/files/releases/release-dataset-view.model.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
*/
88

99
// App dependencies
10-
import { ReleaseVisualization } from "./release-visualization.model";
1110
import { LibraryConstructionApproach } from "../shared/library-construction-approach.model";
1211
import { DevelopmentalStage } from "./developmental-stage.model";
1312
import { ReleaseFileView } from "./release-file-view.model";
13+
import { ReleaseVisualizationView } from "./release-visualization-view.model";
1414

1515
export interface ReleaseDatasetView {
1616
entryId: string; // Project UUID, pulled from ReleaseProject
@@ -19,6 +19,6 @@ export interface ReleaseDatasetView {
1919
files: ReleaseFileView[];
2020
libraryConstructionApproach: LibraryConstructionApproach;
2121
projectShortname: string; // Project short name, pulled from ReleaseProject
22-
visualizations: ReleaseVisualization[];
22+
visualizations: ReleaseVisualizationView[];
2323
}
2424

spa/src/app/files/releases/release-table/release-table.component.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,13 @@ <h2 class="fontsize-xl">{{organView.organ}}</h2>
6464
</mat-header-cell>
6565
<mat-cell *matCellDef="let element" class="fontsize-xxs dot">
6666
<ng-container *ngFor="let visualization of element.visualizations">
67-
<a href={{visualization.url}} target="_blank"
68-
rel="noopener noreferrer">{{visualization.title}}</a>
67+
<hca-tooltip [tooltipClass]="'hca-tooltip narrow'"
68+
[tooltipContent]="visualization.description"
69+
[tooltipDisabled]="false"
70+
[tooltipPosition]="'above'">
71+
<a href={{visualization.url}} target="_blank"
72+
rel="noopener noreferrer">{{visualization.title}}</a>
73+
</hca-tooltip>
6974
</ng-container>
7075
</mat-cell>
7176
</ng-container>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* Human Cell Atlas
3+
* https://www.humancellatlas.org/
4+
*
5+
* View model of a visualization of a study, included in a project.
6+
*/
7+
8+
// App dependencies
9+
import { ReleaseVisualization } from "./release-visualization.model";
10+
11+
export interface ReleaseVisualizationView {
12+
13+
description: string;
14+
releaseVisualisations: ReleaseVisualization[];
15+
}

spa/src/app/files/shared/release.service.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@ import { ReleaseOrganView } from "../releases/release-organ-view.model";
1818
import { ReleaseDatasetView } from "../releases/release-dataset-view.model";
1919
import { ReleaseFileView } from "../releases/release-file-view.model";
2020
import { ReleaseFileType } from "../releases/release-file-type.model";
21+
import { ReleaseVisualizationView } from "../releases/release-visualization-view.model";
2122

2223
@Injectable()
2324
export class ReleaseService {
2425

2526
// Locals
26-
private descriptionByFileType = new Map<string, string>([
27+
private PORTAL_DESCRIPTIONS = new Map<string, string>([
28+
["SCP", "Single Cell Portal"]
29+
]);
30+
private RELEASE_FILE_DESCRIPTIONS = new Map<string, string>([
2731
[`${ReleaseFileType.ANNOTATED_CLUSTERS}h5ad`, "Cumulus output expression matrix; contains clustering information, cell annotations, and log-transformed gene expression (Pegasus, Scanpy, and Seurat compatible)."],
2832
[`${ReleaseFileType.ANNOTATED_CLUSTERS}loom`, "Cumulus output expression matrix; contains clustering information, cell annotations, and log-transformed gene expression (Pegasus, Scanpy, and Seurat compatible)."],
2933
[`${ReleaseFileType.DIFFERENTIAL_EXPRESSION}xlsx`, "Cumulus output file containing differential expression with correction."],
@@ -89,11 +93,14 @@ export class ReleaseService {
8993
// Create view model of release files
9094
const files = this.createReleaseFileViews(releaseDataset);
9195

96+
// Create view model of release visualizations
97+
const visualizations = this.createReleaseVisualizationViews(releaseDataset);
98+
9299
const datasetView = Object.assign({
93100
entryId,
94101
projectShortname,
95102
}, releaseDataset, {
96-
files
103+
files, visualizations
97104
});
98105

99106
return datasetView as ReleaseDatasetView;
@@ -121,7 +128,7 @@ export class ReleaseService {
121128

122129
const type = releaseFile.type;
123130
const extension = releaseFile.extension;
124-
const description = this.descriptionByFileType.get(`${type}${extension}`);
131+
const description = this.RELEASE_FILE_DESCRIPTIONS.get(`${type}${extension}`);
125132
accum.push(Object.assign({}, releaseFile, {
126133
description
127134
}));
@@ -131,6 +138,24 @@ export class ReleaseService {
131138

132139
}
133140

141+
/**
142+
* Create view models for each release visualization in the specified dataset.
143+
*
144+
* @param {ReleaseDataset} releaseDataset
145+
* @returns {ReleaseVisualizationView[]}
146+
*/
147+
private createReleaseVisualizationViews(releaseDataset: ReleaseDataset): ReleaseVisualizationView[] {
148+
149+
return releaseDataset.visualizations.reduce((accum, releaseVisualization) => {
150+
151+
const title = releaseVisualization.title;
152+
const description = this.PORTAL_DESCRIPTIONS.get(title);
153+
accum.push(Object.assign({}, releaseVisualization, {description}));
154+
155+
return accum;
156+
}, []);
157+
}
158+
134159
/**
135160
* Sort datasets alphabetically by project title.
136161
*/

0 commit comments

Comments
 (0)