refreshHeatmapsList()

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;
    }