in client/client/app/shared/heatmapContext/index.js [32:97]
refreshHeatmapsList() {
if (!this.projectContext || this.projectContext._referencesAreLoading) {
return;
}
const references = this.projectContext
? (this.projectContext.references || [])
: [];
const tracks = this.projectContext
? (this.projectContext.tracks || [])
: [];
const referenceId = this.projectContext && this.projectContext.reference
? this.projectContext.reference.id
: undefined;
const heatmapsFromTracks = tracks
.filter(track => track.format === 'HEATMAP')
.map(track => ({...track, referenceId, isTrack: true}));
const heatmapsFromAnnotations = references
.filter(reference => reference.id === referenceId)
.map(r => (r.annotationFiles || []))
.reduce((r, c) => ([...r, ...c]), [])
.filter(track => track.format === 'HEATMAP')
.map(track => ({...track, referenceId, isAnnotation: true}));
const items = heatmapsFromTracks.concat(heatmapsFromAnnotations);
const uniqueIdentifiers = Array.from(new Set(items.map(item => item.id)));
const heatmaps = uniqueIdentifiers
.map(id => items.filter(track => track.id === id).pop())
.filter(Boolean);
const findHeatmap = id => {
const datasets = this.projectContext
? (this.projectContext.datasets || [])
: [];
let heatmap = undefined;
for (const dataset of datasets) {
[heatmap] = dataset.tracks
.filter(track => track.format === 'HEATMAP' && track.id === id)
.map(track => ({...track, referenceId, isTrack: true}));
if (heatmap) {
return heatmap;
}
}
return {id};
};
if (this.selectedHeatmap) {
const exists = heatmaps.filter(track => track.id === this.selectedHeatmap.id);
if (exists.length === 0 && this.heatmapNavigationOccurred) {
this.selectedHeatmap = findHeatmap(this.selectedHeatmap.id);
heatmaps.push(this.selectedHeatmap);
} else if (exists.length === 0) {
this.selectedHeatmap = undefined;
this.currentState = undefined;
this.heatmapNavigationOccurred = false;
this.report();
} else {
this.selectedHeatmap = exists.pop();
}
}
this.heatmaps = heatmaps;
if (!this.selectedHeatmap && this.heatmaps.length > 0) {
this.selectedHeatmap = this.heatmaps[0];
this.currentState = undefined;
this.report();
}
this.contextInitialized = true;
}